CSci 450: Organization of Programming Languages
Exploring Languages using Interpreters and
Functional Programming

H. Conrad Cunningham

16 April 2018

Copyright (C) 2016-2018, H. Conrad Cunningham

Acknowledgements: I adapted and revised much of this work in Summer and Fall 2016 and Spring 2017 from my previous materials. I added new materials in Spring and Summer 2017. This is an ongoing effort that will continue through at least Fall 2018.

In Spring 2018, I linked in modified Programming Paradigms and Abstraction documents that will be included in a future draft of this material. I also changed to my new working title for this work.

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

Advisory: The HTML version of this document requires use of a browser that supports the display of MathML. A good choice as of April 2018 is a recent version of Firefox from Mozilla.

Exploring Languages using Interpreters and Functional Programming

Chapter 0: Course Introduction

Chapter 1: Fundamental Concepts

Chapter 2: Basic Haskell Functional Programming

Chapter 3: Evaluation and Efficiency

Chapter 4: List Programming

Chapter 5: Higher-Order Functions

Partial Chapter 6: Developing Functional Programs

Partial Chapter 7: More List Processing and Problem Solving

Partial Chapter 8: Algebraic Data Types

Partial Chapter 9: Type Classes

Chapter 10: Expression Language Syntax and Semantics

Chapter 11: Expression Language Parsing

Partial Chapter 12: Expression Language Compilation

Chapter 13 in Work: Imperative Core Language

Future Chapters? More Languages and Interpreters

Future Chapters? Using Algebraic Data Types

Partial Chapter: Domain Specific Languages

Future Chapter? Input/Output

Future Chapter? Testing

Partial Chapter: Algebras, Laws, and Synthesis

Partial Chapter: Reduction Models

Partial Chapter: Infinite Data Structures

Future Chapters? Games

Future Chapter? Concurrency

Future Chapter? Parallelism

Future Chapter? Reactive Programming