Exploring Languages with Interpreters

and Functional Programming

2018 Version H. Conrad Cunningham

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: [HTML] [PDF]

Slides: NONE

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)

[HTML] [PDF]

Slides: NONE YET

Chapter 11: Software Testing Concepts

Chapter: [HTML] [PDF]

Slides: NONE YET

Chapter 12: Testing Haskell Programs

Chapter: [HTML] [PDF]

Slides: NONE YET

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: [HTML] [PDF]

Slides: NONE YET

Chapter 20: Problem Solving

Chapter: [HTML] [PDF]

Slides: NONE YET

Chapter 21: Algebraic Data Types

Chapter 22: Overloading and Type Classes

Chapter 23: Data Abstraction Revisited

Chapter: [HTML] [PDF]

Slides: NONE YET

Chapter 24: Type Inference

Chapter: [HTML] [PDF]

Slides: NONE YET

Chapter 25: Proving Haskell Laws

Chapter: [HTML] [PDF]

Slides: NONE YET

Chapter 26: Program Synthesis

Chapter: [HTML] [PDF]

Slides: NONE YET

Chapter 27: Text Processing

Chapter: [HTML] [PDF]

Slides: NONE YET

Chapter 28: FUTURE

Chapter 29: Divide and Conquer Algorithms

Chapter: [HTML] [PDF]

Slides: NONE YET

Chapter 30: Infinite Data Structures

Chapter 40: Language Processing (FUTURE)

Chapter: [HTML] [PDF]

Slides: NONE YET

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: [HTML] [PDF]

Slides: None Yet

Chapter 46: Calculator: Compilation

Chapter: [HTML] [PDF]

Slides: None Yet

Chapter 80: (Appendix) Review of Relevant Mathematics

Chapter: [HTML] [PDF]

Slides: NONE YET

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

TBD: Regular Expressions using algebraic data types

Framework Design Using Function Generalization: A Binary Tree Traversal Case Study

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.