Exploring Languages with Interpreters
and Functional Programming
2018 Version

H. Conrad Cunningham

14 February 2019

Copyright (C) 2016, 2017, 2018, 2019 H. Conrad Cunningham
Professor of Computer and Information Science
University of Mississippi
211 Weir Hall
P.O. Box 1848
University, MS 38677
(662) 915-5358

Browser Advisory: The HTML version of this document may require use of a browser that supports the display of MathML. A good choice as of January 2019 is a recent version of Firefox from Mozilla.

Exploring Languages with Interpreters and Functional Programming

Chapter 0: Preface

Chapter 1: Evolution of Programming Languages

Chapter 2: Programming Paradigms

Chapter 3: Object-Based Paradigms

Chapter 4: First Haskell Programs

Chapter 5: Types

Chapter 6: Procedural Abstraction

Chapter 7: Data Abstraction

Chapter 8: Evaluation Model

Chapter 9: Recursion Styles and Efficiency

Chapter 10: Simple Input and Output (FUTURE)

Chapter 11: Software Testing Concepts

Chapter 12: Testing Haskell Programs

Chapter 13: List Programming

Chapter 14: Infix Operators and List Examples

Chapter 15: Higher-Order Functions

Chapter 16: Haskell Function Concepts

Chapter 17: Higher-Order Function Examples

Chapter 18: More List Processing

Chapter 19: Systematic Generalization

Chapter 20: Problem Solving

Chapter 21: Algebraic Data Types

Chapter 22: Overloading and Type Classes

Chapter 23: Data Abstraction Revisited

Chapter 24: Type Inference

Chapter 25: Proving Haskell Laws

Chapter 26: Program Synthesis

Chapter 27: Text Processing

Chapter 28: FUTURE

Chapter 29: Divide and Conquer Algorithms

Chapter 30: Infinite Data Structures

Chapter 40: Language Processing (FUTURE)

Chapter 41: Calculator: Concrete Syntax

Chapter 42: Calculator: Abstract Syntax & Evaluation

Chapter 43: Calculator: Modular Structure

Chapter 44: Calculator: Parsing

Chapter 45: Parser Combinators

Chapter 46: Calculator: Compilation

Chapter 80: (Appendix) Review of Relevant Mathematics

OLD Chapter 13: Imperative Core Language

UNDER DEVELOPMENT

OLD Chapter 4: List Programming Supplements

Most of the content of this old chapter went into new chapters 13 and 14, but some was moved to earlier chapters.

Future Chapter? Using Algebraic Data Types

Future Chapter? Domain Specific Languages

Future Chapters? Games

Acknowledgements

I began this effort in Summer 2016 by adapting previous materials from my courses on Functional Programming (primarily), Multiparadigm Programming, Object-Oriented Programming, Software Architecture, Software Families, and Software Language Engineering.

I added new materials in Spring and Summer 2017 to draft the 2017 version of the textbook titled Introduction to Functional Programming Using Haskell.

In Spring and Summer 2018, I began work on an updated 2018 version of the textbook, now titled Exploring Languages with Interpreters and Functional Programming. I broke several of the longer chapters into 2-4 new chapters or appendices. I incorporated new material from my Spring 2018 Software Language Engineering class (e.g. Type Concepts). I also wrote new chapters including the two new chapters on Software Testing.

I maintain this textbook as text files in Pandoc’s dialect of Markdown using embedded LaTeX markup for the mathematical formulas and then translate the documents to HTML, PDF, and other formats as needed.