# CSCE 330: Programming Language Structures (Fall 2022; Section 001)

Syllabus
Updated 2022-09-01 with name of new TA and related information (email, office hours). Updated 2022-08-18 with new course description.

Reference materials:

• Hector J. Levesque. Thinking as Computation. The MIT Press, 2012 (required text, referred to as [L]). Supplementary materials from the author are available.
• Graham Hutton. Programming in Haskell. Cambridge University Press, Second Edition, 2017 (required text, referred to as [U]). Supplementary materials from the author, including an errata list, are available.
• Homework, Tests, and Programs
See the lecture log for assignments not listed below.

• HW6. Using the grammar of Clite on slides 51-53 of 330Syntax.pptx, give a parse tree for the statement x = x + a - 1; [T, exercise 2.5(a)].

Quizzes (In-Class Exercises)
Quiz 1 of 22-08-30 (in pdf format, with answer)
Quiz 2 of 22-09-20 (in pdf format, with answer)
Quiz 3 of 22-10-04 (in pdf format, with answer)
Quiz 4 of 22-10-06 (in pdf format, with answer)
Quiz 5 of 22-10-20 (in pdf format, with answer).
Quiz 6 of 22-11-01 (in pdf format, with answer).

In this class, we write dates according to ISO Standard 8601.
Brian Hayes. "The Semicolon Wars." _American Scientist_, July-August 2006, pp.299-303. Local copy, pdf.
Philip Wadler, "Monads for Functional Programming" (pdf, local copy; bibliographical details at the bottom of the first page). Chapter 5 (especially starting with section 5.2) mirrors the presentation in Chapter 8 [H]. The beginning of Section 5.4 specifies the unit and * operations needed to define a monad. The discussion at the beginning of Section 5.12 explains that these operations have the monad properties, and therefore the parsers of Chapter 8 [H] are monads: "The empty parser and sequencing correspond directly to unit and *, and the monads laws reflect that sequencing is associative and has the empty parser as a unit. The failing parser and alternation correspond to zero and (XOR), which satisfy laws reflecting that alternation is associative and has the failing parser as a unit, and that sequencing distributes through alternation."
Philip Wadler, "Propositions as Types" (video, September 25-26, 2015). Related paper: Philip Wadler. "Propositions as Types." Communications of the ACM, 58, 12, 75-84 (December 2015). ( Long version from author's website (pdf))
Functional Programming in the Real World.
Repository of Code for: Cristina Videira Lopez. Exercises in Programming Style. CRC Press, 2014.
Parnas D.L. (December 1972). "On the Criteria To Be Used in Decomposing Systems into Modules" (PDF). Comm ACM 15 (12): 1053-1058 (local copy).
Derek Partridge and Yorick Wilks. "Does AI Have a Methodology Different from Software Engineering?" Technical Report MCCS-86-53 (1986), Computing Research Laboratory, University of New Mexico (local copy).
Computer Language History web site by Eric Levenez
The Ariane 5 launch disaster.
Local copy of: Adrion, W.A., M.A. Branstad, and J.C. Cherniavsky. "Validation, Verification and Testing of Computer Software." ACM Computing Surveys, 14, 2 (June 1982), pp.159--192.
Local copy of: Rajlich, V., N. Wilde, M. Buckellew. and H. Page. ``Software Cultures and Evolution.'' _Computer_, 34, 9 (September 2001), pp.24--28.
C.A.R. Hoare. "Retrospective: An Axiomatic Basis for Computer Programming." _Communications of the ACM_, 52, 10 (October 2009), pp.30-32.
C.A.R. Hoare. "An Axiomatic Basis for Computer Programming. _Communications of the ACM_, 12, 10 (October 1969), 576-580.
John McCarthy. "A Micromanual for LISP---Not The Whole Truth." ACM SIGPLAN Notices, Vol. 13, Issue 8 (August 1978), Pages 215-216 (local copy)
The Simplesem interpreter
: unzip, and follow the instructions in readme.txt. This is a Java implementation that seems robust and will run in Windows.
Carter Bays's FP interpreter
John Backus. "Can Programming Be Liberated from the von Neumann Style? A Functional Style and Its Algebra of Programs." Communications of the ACM, 21, 8 (August 1978), 613-641
John Backus: Function Level Programming and the FL Language: a 1987 lecture on FP by John Backus.
Boyko Bantchev's List of Interviews with Programming Language Creators from Computerworld's series "The A-Z of Programming Languages (pdf)
A to Z of Programming Languages Index
J.W. Backus. "The 701 Speedcoding System." Journal of the ACM, 1, 1, pp.4-6, 1954 (local copy).
A site with a short program written in many languages, not including FP.
A site with another short program written in several languages..
Examples of APL code
John McCarthy, developer of LISP, wins the Franklin Medal
John McCarthy's Obituary from the _New York Times_, 2011-10-25 (local copy).
Dennis Ritchie's Obituary from the _New York Times_, 2011-10-13 (local copy).
Alain Colmerauer's obituary from _CACM_, 2017-05-22
Joe Armstrong. "Erlang." Communications of the ACM, Vol. 53 No. 9 (September 2010), Pages 68-75.. This article describes the notion of dynamic code upgrade.
Pascal Rigaux's Diagrams of Programming Language History.
Eric Levenez's Genealogy of Programming Languages.