4.12 Fundamentals of Functional Programming