Programming Languages and Functional Programming