Designing Abstractions with First-Class Functions | part of How to Design Programs: An Introduction to Programming and Computing | MIT Press books | IEEE Xplore