An Introduction to Functional Programming