Course Information
 Instructor:
Hongwei Xi (email: hwxiATbuDOTedu)
 Instructor's Office: MCS 287
 Instructor's Office Hours: TR: 23; W: 13; by appointment
 Teaching Fellow:
TF's classpage (email: hwwuATbuDOTedu)
 TF Office Hours: Wed from 3 to 5pm at PSY234.
 Grader: TBA

Syllabus:
(pdf)

A weekbyweek schedule
 Lecture Times: Tuesday and Thursday 12:302:00
 Classroom: CAS 216
 Midterm1: TakeHome, Thursday, March 6, 2014
 Midterm2: TakeHome, Tuesday, April 15, 2014
 Final: InClass, Wednesday, 7 May, 2014, from 12:30 to 2:30PM
Overview
Concepts of Programming Languages
is a course that introduces
students to some fundamental concepts in programming language design and
implementation. The primary goal is to allow students who complete this
subject to have a good feel for the elements of style and aesthetics of
programming and a good command of the major techniques for controlling
complexity in programming.
ATS is a programming language that makes pervasive use of types in
capturing programming invariants. We will be learning how datatypes in ATS
can be used to conveniently model data structures and how pattern matching
can be used to facilitate programming with datatypes. Also, we are to make
extensive use of abstract types in the construction of (relatively) large
and complex programs.
Ultimately, we would like to make a convincing argument that programming
can be a great deal of fun if you do it the right way!
Prerequisites
 CS112 (CS Intro II) or equivalents.
Textbook
Reference Books
Programming Languages
 ATS
(this mode may be helpful if you
use emacs to edit ATS source code)
Class Calendar
 Assignment 0: Due Tuesday, the 21st of January, 2014
Links:
(Makefile)
(assignment0plain)
(assignment0syntaxhilighted)
 Assignment 1: Due Thursday, the 30th of January, 2014
Links:
(Makefile)
(assignment1.txt)
(assignment1.sats)
(assignment1.dats)
(assignment1_money.dats)
(assignment1a_money.dats)
(CS3202014Spring.hats)
 Assignment 2: Due Thursday, the 6th of February, 2014
Links:
(Makefile)
(intlist)
(intarray)
(assignment2.sats)
(assignment2.dats)
(assignment2_myseq1.dats)
(assignment2_myseq2.dats)
(CS3202014Spring.hats)
(gtkcairodraw) (bonus) (due 02/11)
 Assignment 3: Due Thursday, the 13th of February, 2014
Links:
(Makefile)
(intlist)
(assignment3.sats)
(assignment3_subsetsum.dats)
(assignment3_listpermute.dats)
 Assignment 4: Due Thursday, the 20th of February, 2014
Links:
(Makefile)
(intlist)
(inttree)
(assignment4.sats)
(assignment4.dats)
 Assignment 5: Due Thursday, the 27th of February, 2014
Links:
(Makefile)
(assignment5.sats)
(assignment5.dats)
(CS3202014Spring.hats)
 Assignment 6: Due Friday, the 7th of February, 2014
Links:
(Makefile)
(WORMupdate.dats)
(gtkcairodraw.dats)
 Assignment 7: Due Tuesday, the 25th of March, 2014
Links: (Assignment7)
 Assignment 8: Due Friday, the 4th of April, 2014
Links: (Assignment8)
 Assignment 9: Due Friday, the 11th of April, 2014
Links: (Assignment9)
 Assignment 10: Due Thursday, the 1st of May, 2014
Links: (Assignment10)
 A 1.5 hour inclass exam on Tuesday, 15 April, 2014.
Please find related files in this directory: midterm2
 A twohour exam from 12:30 to 2:30pm on Wednesday, 7 May, 2014.

