\PassOptionsToPackage{unicode=true}{hyperref} % options for packages loaded elsewhere
\PassOptionsToPackage{hyphens}{url}
%
\documentclass[]{article}
\usepackage{lmodern}
\usepackage{amssymb,amsmath}
\usepackage{ifxetex,ifluatex}
\usepackage{fixltx2e} % provides \textsubscript
\ifnum 0\ifxetex 1\fi\ifluatex 1\fi=0 % if pdftex
  \usepackage[T1]{fontenc}
  \usepackage[utf8]{inputenc}
  \usepackage{textcomp} % provides euro and other symbols
\else % if luatex or xelatex
  \usepackage{unicode-math}
  \defaultfontfeatures{Ligatures=TeX,Scale=MatchLowercase}
\fi
% use upquote if available, for straight quotes in verbatim environments
\IfFileExists{upquote.sty}{\usepackage{upquote}}{}
% use microtype if available
\IfFileExists{microtype.sty}{%
\usepackage[]{microtype}
\UseMicrotypeSet[protrusion]{basicmath} % disable protrusion for tt fonts
}{}
\IfFileExists{parskip.sty}{%
\usepackage{parskip}
}{% else
\setlength{\parindent}{0pt}
\setlength{\parskip}{6pt plus 2pt minus 1pt}
}
\usepackage{hyperref}
\hypersetup{
            pdftitle={CSci 450: Organization of Programming Languages Exploring Languages using Interpreters and Functional Programming},
            pdfauthor={H. Conrad Cunningham},
            pdfborder={0 0 0},
            breaklinks=true}
\urlstyle{same}  % don't use monospace font for urls
\setlength{\emergencystretch}{3em}  % prevent overfull lines
\providecommand{\tightlist}{%
  \setlength{\itemsep}{0pt}\setlength{\parskip}{0pt}}
\setcounter{secnumdepth}{0}
% Redefines (sub)paragraphs to behave more like sections
\ifx\paragraph\undefined\else
\let\oldparagraph\paragraph
\renewcommand{\paragraph}[1]{\oldparagraph{#1}\mbox{}}
\fi
\ifx\subparagraph\undefined\else
\let\oldsubparagraph\subparagraph
\renewcommand{\subparagraph}[1]{\oldsubparagraph{#1}\mbox{}}
\fi

% set default figure placement to htbp
\makeatletter
\def\fps@figure{htbp}
\makeatother

\usepackage{caption}
\DeclareCaptionLabelFormat{nolabel}{}
\captionsetup{labelformat=nolabel}

\title{CSci 450: Organization of Programming Languages\\
Exploring Languages using Interpreters and\\
Functional Programming}
\author{\textbf{H. Conrad Cunningham}}
\date{\textbf{16 April 2018}}

\begin{document}
\maketitle

{
\setcounter{tocdepth}{4}
\tableofcontents
}
Copyright (C) 2016-2018, H. Conrad Cunningham

\textbf{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.

\textbf{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.

\hypertarget{exploring-languages-using-interpreters-and-functional-programming}{%
\section{Exploring Languages using Interpreters and Functional
Programming}\label{exploring-languages-using-interpreters-and-functional-programming}}

\hypertarget{chapter-0-course-introduction}{%
\subsection{Chapter 0: Course
Introduction}\label{chapter-0-course-introduction}}

\begin{itemize}
\tightlist
\item
  \textbf{Not updated for Programming Languages course}
  {[}\href{00Course.html}{HTML}{]} {[}\href{00Course.pdf}{PDF}{]}
\end{itemize}

\hypertarget{chapter-1-fundamental-concepts}{%
\subsection{Chapter 1: Fundamental
Concepts}\label{chapter-1-fundamental-concepts}}

\begin{itemize}
\item
  {[}\href{01Fundamental450.html}{HTML}{]}
  {[}\href{01Fundamental450.pdf}{PDF}{]}
\item
  Partially reorganized material in Spring 2018 (I plan to break old
  chapter 1 into two chapters and an appendix. This is a new draft of
  the second part.)

  \begin{itemize}
  \tightlist
  \item
    Programming Paradigms (drawn from old sections 1.3, 1.4, 1.7)
    {[}\href{ProgrammingParadigms.html}{HTML}{]}
    {[}\href{ProgrammingParadigms.pdf}{PDF}{]}
  \end{itemize}
\item
  Supplementary slides:

  \begin{itemize}
  \tightlist
  \item
    \href{slides/EvolvingHardwareSlides.html}{Evolving Computer Hardware
    Affecs Programming Languages (HTML)}
  \item
    \href{slides/PrimaryParadigmsSlides.html}{Primary Programming
    Paradigms (HTML)}
  \item
    \href{slides/HistorySlides.html}{History of Programming Languages
    (HTML)}
  \end{itemize}
\end{itemize}

\hypertarget{chapter-2-basic-haskell-functional-programming}{%
\subsection{Chapter 2: Basic Haskell Functional
Programming}\label{chapter-2-basic-haskell-functional-programming}}

\begin{itemize}
\item
  {[}\href{02BasicHaskell450.html}{HTML}{]}
  {[}\href{02BasicHaskell450.pdf}{PDF}{]}
\item
  Partially reorganized material in Spring 2018 (I plan to break old
  chapter 2 into two chapters. This is a draft of the second part.)

  \begin{itemize}
  \tightlist
  \item
    Abstraction (drawn from old sections 1.6, 2.5, 2.6, 2.7)
    {[}\href{Abstraction/Abstraction.html}{HTML}{]}
    {[}\href{Abstraction/Abstraction.pdf}{PDF}{]}
  \end{itemize}
\item
  Supplementary slides:

  \begin{itemize}
  \tightlist
  \item
    \href{slides/FirstHaskellSlides.html}{Our First Haskell Functions
    (HTML)}
  \item
    \href{slides/StepwiseRefinementSlides.html}{Top-Down Stepwise
    Refinement (HTML)}
  \item
    \href{slides/DataAbstractionSlides.html}{Using Data Abstraction
    (HTML)}
  \end{itemize}
\end{itemize}

\hypertarget{chapter-3-evaluation-and-efficiency}{%
\subsection{Chapter 3: Evaluation and
Efficiency}\label{chapter-3-evaluation-and-efficiency}}

\begin{itemize}
\item
  {[}\href{03EvalEff450.html}{HTML}{]}
  {[}\href{03EvalEff450.pdf}{PDF}{]}
\item
  Supplementary slides:

  \begin{itemize}
  \tightlist
  \item
    \href{slides/EvalModelSlides.html}{Evaluation of Functional Programs
    (HTML)}
  \item
    \href{slides/RecursionStylesSlides.html}{Recursion Styles (HTML)}
  \end{itemize}
\end{itemize}

\hypertarget{chapter-4-list-programming}{%
\subsection{Chapter 4: List
Programming}\label{chapter-4-list-programming}}

\begin{itemize}
\item
  {[}\href{04Lists450.html}{HTML}{]} {[}\href{04Lists450.pdf}{PDF}{]}
\item
  Supplementary slides:

  \begin{itemize}
  \tightlist
  \item
    \href{slides/ListProgrammingSlides.html}{List Programming (HTML)}
  \end{itemize}
\item
  Supplementary notes used Spring 2017

  \begin{itemize}
  \tightlist
  \item
    \href{../CandyBowl/Lua/candybowl_semantics.html}{Candy Bowl ADT
    Semantics}
  \end{itemize}
\item
  Possible future material on modular programming based on:

  \begin{itemize}
  \tightlist
  \item
    \href{../ModularDesign.html}{Lecture Notes on Modular Design}
  \item
    \href{../DataAbstraction.html}{Lecture Notes on Data Abstraction}
  \item
    \href{../Digraph/Haskell/DigraphADT.html}{Labelled Digraph Abstract
    Data Type}
  \item
    \href{../CookieJar/Scala/CookieJar_problem.html}{Cookie Jar ADT
    Problem Description (Scala)}
  \end{itemize}
\end{itemize}

\hypertarget{chapter-5-higher-order-functions}{%
\subsection{Chapter 5: Higher-Order
Functions}\label{chapter-5-higher-order-functions}}

\begin{itemize}
\item
  {[}\href{05HigherOrder450.html}{HTML}{]}
  {[}\href{05HigherOrder450.pdf}{PDF}{]}
\item
  Supplementary slides:

  \begin{itemize}
  \item
    \href{slides/HigherOrderFunctionsSlides.html}{Higher-Order List
    Programming}
  \item
    \href{slides/FunctionConceptsSlides.html}{Haskell Function Concepts}
  \end{itemize}
\item
  TBD: Regular expression combinators
\end{itemize}

\hypertarget{partial-chapter-6-developing-functional-programs}{%
\subsection{Partial Chapter 6: Developing Functional
Programs}\label{partial-chapter-6-developing-functional-programs}}

\begin{itemize}
\tightlist
\item
  {[}\href{06Developing450.html}{HTML}{]}
  {[}\href{06Developing450.pdf}{PDF}{]}
\end{itemize}

\hypertarget{partial-chapter-7-more-list-processing-and-problem-solving}{%
\subsection{Partial Chapter 7: More List Processing and Problem
Solving}\label{partial-chapter-7-more-list-processing-and-problem-solving}}

\begin{itemize}
\tightlist
\item
  {[}\href{07MoreLists450.html}{HTML}{]}
  {[}\href{07MoreLists450.pdf}{PDF}{]}
\end{itemize}

\hypertarget{partial-chapter-8-algebraic-data-types}{%
\subsection{Partial Chapter 8: Algebraic Data
Types}\label{partial-chapter-8-algebraic-data-types}}

\begin{itemize}
\item
  {[}\href{08AlgDataTypes450.html}{HTML}{]}
  {[}\href{08AlgDataTypes450.pdf}{PDF}{]}
\item
  Supplementary slides:

  \begin{itemize}
  \tightlist
  \item
    \href{slides/AlgDataTypesSlides.html}{Algebraic Data Types}
  \end{itemize}
\end{itemize}

\hypertarget{partial-chapter-9-type-classes}{%
\subsection{Partial Chapter 9: Type
Classes}\label{partial-chapter-9-type-classes}}

\begin{itemize}
\item
  {[}\href{TypeClasses450.html}{HTML}{]}
  {[}\href{TypeClasses450.pdf}{PDF}{]}
\item
  Supplementary slides:

  \begin{itemize}
  \tightlist
  \item
    \href{slides/TypeClassSlides.html}{Overloading and Type Classes}
  \end{itemize}
\end{itemize}

\hypertarget{chapter-10-expression-language-syntax-and-semantics}{%
\subsection{Chapter 10: Expression Language Syntax and
Semantics}\label{chapter-10-expression-language-syntax-and-semantics}}

\begin{itemize}
\item
  {[}\href{../ExprLang/10ExprLangSynSem.html}{HTML}{]}
  {[}\href{../ExprLang/10ExprLangSynSem.pdf}{PDF}{]}
\item
  Modules

  \begin{itemize}
  \tightlist
  \item
    \href{../ExprLang/AbSynExpr.hs}{Abstract Syntax module}
  \item
    \href{../ExprLang/EvalExpr.hs}{Evaluator module}
  \item
    \href{../ExprLang/Environments.hs}{Environments module}
  \item
    \href{../ExprLang/Values.hs}{Values module}
  \item
    \href{../ExprLang/ProcessAST.hs}{Process AST module (in work)}
    (simplfication and derivation on ASTs)
  \end{itemize}
\end{itemize}

\hypertarget{chapter-11-expression-language-parsing}{%
\subsection{Chapter 11: Expression Language
Parsing}\label{chapter-11-expression-language-parsing}}

\begin{itemize}
\item
  {[}\href{../ExprLang/11ExprLangParsing.html}{HTML}{]}
  {[}\href{../ExprLang/11ExprLangParsing.pdf}{PDF}{]}

  Supplemental slides:

  \begin{itemize}
  \tightlist
  \item
    \href{../ExprLang/ExprLangParsingSlides.html}{Expression Language
    Parsing}
  \end{itemize}
\item
  Common modules (Chapters 10 and 11)

  \begin{itemize}
  \tightlist
  \item
    \href{../ExprLang/LexExpr.hs}{Lexical analyzer module}
  \item
    \href{../ExprLang/AbSynExpr.hs}{Abstract Syntax module}
  \item
    \href{../ExprLang/EvalExpr.hs}{Evaluator module}
  \item
    \href{../ExprLang/Environments.hs}{Environments module}
  \item
    \href{../ExprLang/Values.hs}{Values module}
  \end{itemize}
\item
  Prefix syntax specific modules

  \begin{itemize}
  \tightlist
  \item
    \href{../ExprLang/PrefixExprREPL.hs}{Prefix REPL module}
  \item
    \href{../ExprLang/ParsePrefixExpr.hs}{Recursive descent parser for
    prefix expression language}
  \item
    \href{../ExprLang/TestPrefix06.hs}{Test Prefix (in work, not
    current)}
  \item
    \href{../ExprLang/PrefixExprREPL.hs}{Prefix REPL module}
  \end{itemize}
\item
  Infix syntax specific module

  \begin{itemize}
  \tightlist
  \item
    \href{../ExprLang/InfixExprREPL.hs}{Infix REPL module}
  \item
    \href{../ExprLang/ParseInfixExpr.hs}{Recursive descent parser for
    infix expression language} (simple expressions)
  \item
    \href{../ExprLang/TestInfix03.hs}{Test Infix (in work, not current)}
  \end{itemize}
\item
  Other modules

  \begin{itemize}
  \tightlist
  \item
    \href{../ExprLang/ParserComb.hs}{Parser combinators module (in
    work)}
  \item
    \href{../ExprLang/TestParserComb.hs}{Test parser combinators (in
    work)}
  \item
    \href{../ExprLang/ProcessAST.hs}{Process AST module (in work)}
    (simplfication and derivation on ASTs, chapter 10)
  \item
    \href{../ExprLang/SInstr01.hs}{Stack Virtual Machine module (in
    work)} (code generation, chapter 10)
  \item
    \href{../ExprLang/ParserComb.hs}{Parser Combinators module}
  \end{itemize}
\end{itemize}

\hypertarget{partial-chapter-12-expression-language-compilation}{%
\subsection{Partial Chapter 12: Expression Language
Compilation}\label{partial-chapter-12-expression-language-compilation}}

\begin{itemize}
\item
  {[}\href{../ExprLang/12ExprLangCompiling.html}{HTML}{]}
  {[}\href{../ExprLang/12ExprLangCompiling.pdf}{PDF}{]}
\item
  Code in work

  \begin{itemize}
  \tightlist
  \item
    \href{../ExprLang/SInstr01.hs}{Stack Virtual Machine?}
  \end{itemize}
\end{itemize}

\hypertarget{chapter-13-in-work-imperative-core-language}{%
\subsection{Chapter 13 in Work: Imperative Core
Language}\label{chapter-13-in-work-imperative-core-language}}

\begin{itemize}
\item
  \href{../ImpCore/ImpCore.html}{Imperative Core Language Case Study}
  (does not exist yet as of 27 Sep)
\item
  Interpreter modules (prefix syntax) code mostly works but needs a bit
  of update to match recent changes to Expression Language

  \begin{itemize}
  \tightlist
  \item
    \href{../ImpCore/ImpCore.hs}{REPL module}
  \item
    \href{../ImpCore/ParseImpCore.hs}{Recursive descent parser module}
  \item
    \href{../ImpCore/LexImpCore.hs}{Lexical analyzer module}
  \item
    \href{../ImpCore/AbSynImpCore.hs}{Abstract Syntax module}
  \item
    \href{../ImpCore/EvalImpCore.hs}{Evaluator module}
  \item
    \href{../ImpCore/Environments.hs}{Environments module}
  \item
    \href{../ImpCore/Values.hs}{Values module}
  \item
    \href{../ImpCore/TestImpCore.hs}{Test Imp Core(in work, not
    current)}
  \end{itemize}
\end{itemize}

\hypertarget{future-chapters-more-languages-and-interpreters}{%
\subsection{Future Chapters? More Languages and
Interpreters}\label{future-chapters-more-languages-and-interpreters}}

\begin{itemize}
\tightlist
\item
  TBD: Add function definitions and calls, local variables
\item
  TBD: Simple Imperative Core Language
\item
  TBD: Simple Lisp/Scheme language
\item
  TBD: Modular/OO language
\item
  TBD: Lazy language
\item
  TBD: Compilation
\item
  TBD: Continuations
\end{itemize}

\hypertarget{future-chapters-using-algebraic-data-types}{%
\subsection{Future Chapters? Using Algebraic Data
Types}\label{future-chapters-using-algebraic-data-types}}

\begin{itemize}
\item
  TBD: Error handling with \texttt{Maybe} and \texttt{Either} --
  \href{https://john.cs.olemiss.edu/~hcc/csci555/notes/FPS04/ErrorHandling.html}{Handling
  Errors Without Exceptions (Scala)}
\item
  TBD: Regular Expressions using algebraic data types
\item
  Not used Spring 2017

  \begin{itemize}
  \tightlist
  \item
    \href{https://john.cs.olemiss.edu/~hcc/papers/BinTreeFramework.pdf}{Framework
    Design Using Function Generalization: A Binary Tree Traversal Case
    Study}
  \item
    \href{MealyMachineSimulator.html}{Mealy Machine Simulator}
  \item
    \href{../Digraph/Haskell/DigraphADT.html}{Labelled Digraph Abstract
    Data Type}
  \end{itemize}
\end{itemize}

\hypertarget{partial-chapter-domain-specific-languages}{%
\subsection{Partial Chapter: Domain Specific
Languages}\label{partial-chapter-domain-specific-languages}}

\begin{itemize}
\item
  \href{../DomainSpecificLanguages.html}{Domain Specific Languages}
\item
  Sandwich DSL Case Study

  \begin{itemize}
  \tightlist
  \item
    \href{../SandwichDSL/Haskell/SandwichDSL.html}{Haskell version}
  \item
    \href{../SandwichDSL/Scala/SandwichDSL.html}{Scala version}
  \item
    \href{http://john.cs.olemiss.edu/~hcc/csci555/notes/SandwichDSL/Lua/sandwich_model.lua}{old
    Lua version}
  \end{itemize}
\item
  DSL in other languages (not used Spring 2017)

  \begin{itemize}
  \tightlist
  \item
    State Machine DSL (Scala)
  \item
    Lair DSL (Lua)
  \item
    Survey DSL (Ruby)
  \item
    Computer Configuration DSL (Scala)
  \item
    Email DSL (Scala)
  \end{itemize}
\end{itemize}

\hypertarget{future-chapter-inputoutput}{%
\subsection{Future Chapter?
Input/Output}\label{future-chapter-inputoutput}}

\hypertarget{future-chapter-testing}{%
\subsection{Future Chapter? Testing}\label{future-chapter-testing}}

\hypertarget{partial-chapter-algebras-laws-and-synthesis}{%
\subsection{Partial Chapter: Algebras, Laws, and
Synthesis}\label{partial-chapter-algebras-laws-and-synthesis}}

\begin{itemize}
\item
  TBD: Discussion of functors, applicative functors, and monads (perhaps
  semigroups and monoids) -- perhaps use \texttt{Maybe}
\item
  From \href{../haskell_notes.pdf}{\emph{Notes on Functional Programming
  with Haskell}}:

  \begin{itemize}
  \tightlist
  \item
    Chapter 11, Haskell Laws
  \item
    Chapter 12, Program Synthesis
  \end{itemize}
\end{itemize}

\hypertarget{partial-chapter-reduction-models}{%
\subsection{Partial Chapter: Reduction
Models}\label{partial-chapter-reduction-models}}

\begin{itemize}
\item
  From \href{../haskell_notes.pdf}{\emph{Notes on Functional Programming
  with Haskell}}:

  \begin{itemize}
  \tightlist
  \item
    Chapter 13, Models of Reduction
  \item
    Chapter 14, Divide and Conquer
  \end{itemize}
\end{itemize}

\hypertarget{partial-chapter-infinite-data-structures}{%
\subsection{Partial Chapter: Infinite Data
Structures}\label{partial-chapter-infinite-data-structures}}

\begin{itemize}
\item
  \href{https://john.cs.olemiss.edu/~hcc/csci555/notes/FPS05/Laziness.html}{Strictness
  and Laziness (Scala)}
\item
  From \href{../haskell_notes.pdf}{\emph{Notes on Functional Programming
  with Haskell}}:

  \begin{itemize}
  \tightlist
  \item
    Chapter 15, Infinite Data Structures
  \end{itemize}
\end{itemize}

\hypertarget{future-chapters-games}{%
\subsection{Future Chapters? Games}\label{future-chapters-games}}

\begin{itemize}
\item
  \href{../Wizard/Elixir/wizards_game2a.ex}{Wizard's Adventure game
  (Elixir)}
\item
  \href{../Dice_of_Doom/Elixir/dice_of_doom_v2a.ex}{Dice of Doom
  (Elixir)}
\end{itemize}

\hypertarget{future-chapter-concurrency}{%
\subsection{Future Chapter?
Concurrency}\label{future-chapter-concurrency}}

\begin{itemize}
\tightlist
\item
  TBD
\end{itemize}

\hypertarget{future-chapter-parallelism}{%
\subsection{Future Chapter?
Parallelism}\label{future-chapter-parallelism}}

\begin{itemize}
\tightlist
\item
  TBD
\end{itemize}

\hypertarget{future-chapter-reactive-programming}{%
\subsection{Future Chapter? Reactive
Programming}\label{future-chapter-reactive-programming}}

\begin{itemize}
\tightlist
\item
  TBD
\end{itemize}

\end{document}
