CSCI.4430 Programming Languages-- Fall 2021

Instructor:  Carlos Varela
Office:  Lally 308 (x 6912)
WebEx Personal Room
Office Hours:  Tuesdays and Fridays, 12:30-1:45pm; or by appointment
Meeting Place:  Sage 3510, Darrin 337, and Academy Hall Auditorium. --Classroom assignment by last name.
WebEx Meeting
Meeting Hours:  Tuesdays and Fridays 2:00-3:50pm
Lecture Recordings:  Listed in the below syllabus with handouts. You must be logged in to webex to access them.

TAs: Charles Cook, Peter Ly, James Oswald, Max Schwartz, and John Slowik
TAs' Office: WebEx Teams
TAs' Office Hours: Listed below. More to be announced.
John: Mondays and Thursdays 4-6pm
Peter: Wednesday 10:30am-12pm and Wednesday 2-4:30pm
Charles: Tuesday 5-7pm and Wednesday 12-2pm
James: Thursday 12-4pm
Max: Tuesdays and Thursdays 10am-12pm
10:00am-TA OH



AE 118



AE 118
10:30am-TA OH


& Yimin
12:00pm-TA OH


Seth &



Carnegie 205


2:00pm-LectureTA OH


& Yimin


Carnegie 205
4:00pm-TA OH


Jack &

AE 215


Jack &

AE 215
5:00pm-TA OH


Seth &

Mentors: Prasant Acharya, Jack Jiang, David Kim, Thomas Kozlowski, Seth Laurenceau, Yichen Li, Katherine Weng, and Yimin Zhang.
Instructional Support Coordinator: Shianne Hulbert.

Home page
LMS Home Page:
Use LMS to submit your assignments, check your grades, and post/answer questions in the discussion board.
To contact the instructor, instructional support coordinator, TAs, and mentors about the course, please email:  proglang AT cs DOT rpi DOT edu.

Course Description

This course will enable students to understand essential aspects of programming languages --i.e., theoretical foundations, syntax, semantics, data abstraction, control abstraction, types, scope of variables, and expression evaluation mechanisms.  Students will be exposed to different programming paradigms (computation models) including functional programming, concurrent programming, and logic programming. Students will write programming assignments in Oz, Haskell, SALSA, Erlang and/or Prolog.


CSCI.2300 Introduction to Algorithms and CSCI.2600 Principles of Software.

Course Themes

Programming Language Essentials. Functional, Concurrent, and Logic Programming Paradigms.

Learning Outcomes

When students have successfully completed this course, they will be able to:

Programming Assignments

Course Contents

  1. Introduction
  2. Functional Programming
  3. Concurrent Programming
  4. Logic Programming

Tentative Course Syllabus

Date Topic Handouts Chapter/Section
08/31 Introduction to programming languages:  history, essentials, syntax, semantics, paradigms. pdf ppt functions.hs functions.oz lectureNotepad1.png lectureNotepad2.png Lecture Recording PDCS Chapter 2
09/03 Lambda calculus:  alpha-renaming, beta-reduction, applicative and normal evaluation orders, Church-Rosser theorem, combinators, booleans pdf ppt combinators.hs combinators.oz eta.hs eta.oz whiteboardNotes.jpg Lecture Recording PDCS Chapter 2
09/10 Lambda calculus: higher order programming, eta-conversion, recursion combinator, numbers, Church numerals
pdf ppt hop.hs hop.oz lambda-booleans.hs lambda-booleans.oz lambda-numbers.hs lambda-numbers.oz rec.oz seq.oz lectureNotepad1.jpg lectureNotepad2.jpg lectureNotepad3.jpg Lecture Recording PDCS Chapter 2
09/14 Functional programming: lists, records, pattern matching, recursion (Haskell, Oz)
Programming Assignment 1 Due 09/27
pdf ppt pa1.html comb.hs comb.oz lists.hs lists.oz nth.hs nth.oz pascal.hs pascal.oz pairs.jpg booleans.jpg churchNumeralsFactorial.jpg churchNumeralsPredecessor.jpg churchNumeralsExponential.jpg churchNumeralsAlternative+.jpg Lecture Recording CTM Sections 1.1-1.7, 3.2, 3.4.1-3.4.2, 4.7.2
09/17 Higher order programming: closures, procedural abstraction, genericity, instantiation, embedding. pdf ppt iterate.hs sqrt.hs sqrt.oz pascal.hs pascal.oz nth.hs nth.oz whiteboardNotes.jpg Lecture Recording CTM Sections 3.2 and 3.6.1
09/21 Control abstractions: map, reduce, iterate, fold, filter pdf ppt explicit-lazy.oz iscombinator.hs iscombinator.oz mapreduce.hs mapreduce.oz nth.hs nth.oz ozDataTypes.jpg whiteboardNotes.jpg Lecture Recording CTM Sections 1.9, 3.6, 4.7
09/24 Lazy evaluation, infinite data structures, set comprehensions pdf ppt lazy-eval.hs lazy-eval.oz haskellPatternMatching.jpg ozDataTypesUpdated.jpg whiteboardNotes.jpg Lecture Recording CTM Sections 1.8, 4.5
09/28 Type checking and type inference, abstract data types, monads pdf ppt count-monad.hs list-monad.hs stack.hs stack.oz type-limitations.hs Lecture Recording CTM Chapters 2.8.3 and 3.7, EPL Chapter 4, GIH Section 9
10/01 Review for Exam 1 pdf ppt Lecture Recording
Exam 1
10/08 Actors:  a model of concurrent computation pdf ppt Lecture Recording PDCS Chapter 4
10/12 Actor programming languages (SALSA, Erlang) pdf ppt cell.erl cellTester.erl treeprod.erl Lecture Recording PDCS Chapter 9, CPE Chapter 5
10/15 Concurrency control abstractions
Programming Assignment 2 Due 10/28
pdf ppt fibonacci.erl Calculator.salsa Fibonacci.salsa pa2.pdf Lecture Recording PDCS Chapter 9, CPE Chapter 5
10/19 Distributed systems abstractions
pdf ppt erlang-addressbook erlang-dcell erlang-squares erlang-dsquares salsa-addressbook salsa-dcell salsa-squares salsa-dsquares Lecture Recording PDCS Chapter 9, CPE Chapter 6
Mobility (SALSA) and fault-tolerance (Erlang) abstractions; garbage collection, visualization (SALSA), hot code loading (Erlang) pdf ppt addressbook_exception.erl Migrate.salsa MigrateBook.salsa MovingCellTester.salsa Lecture Recording PDCS Chapter 9, CPE Chapter 7
10/26 Object-oriented programming: inheritance, polymorphism (Oz, Java) pdf ppt oop.oz Lecture Recording CTM Chapters 6.1-6.4 and 7.1-7.2
Declarative concurrency: dataflow variables, suspendable statements (Oz) pdf ppt dconcurrency.oz Lecture Recording CTM 4
11/02 Review for Exam 2 pdf ppt nicole_sol.jpg jiangxu_sol.jpg BSTree.salsa BSTreeTester.salsa bstree.erl bstreeTester.erl M.oz computation_tree.jpg Lecture Recording
Exam 2
Predicate calculus, first-order logic, Horn clauses, Clocksin-Mellish procedure. pdf ppt Lecture Recording PLP 11 (On LMS)
Terms, resolution, unification, search, backtracking (Prolog); Relational computation model (Oz). pdf ppt students.oz rainy.oz clocksin-mellish1.jpg clocksin-mellish2.jpg Lecture Recording PLP 11, CTM 9.1
Prolog imperative control flow: cut(!), call, fail, not, repeat, findall. Closed-world assumption, generate-and-test. Lists, append relation (Prolog, Oz)
Programming Assignment 3 Due 12/02
pdf ppt pa3.pdf append.oz family.oz InfiniteRegression.jpg NaturalSearchTree.jpg AppendFunction.jpg Lecture Recording PLP 11, CTM 9.3
Constraint satisfaction problems: propagate-and-search; natural language parsing: definite clause grammars pdf ppt sentences.oz sentences2.oz sentences3.oz digit.oz constraints.oz propagate-search.oz crossword.oz Lecture Recording PLP 11, CTM 9.2, 9.4, 12.1-12.2
11/23 Prolog I/O, equalities, types, operators; Knowledge bases: assert, retract
pdf ppt member.oz graph-db.oz Lecture Recording PLP 11, CTM 9.6
11/30 Accumulators, difference lists
pdf ppt accumulators.oz dlists.oz Lecture Recording CTM 3.4.3-3.4.4
12/03 Constraint programming: computation spaces
pdf ppt rectangle.oz palindrome.oz sendmoremoney.oz Lecture Recording CTM 12.3-12.5
12/07 Review for Exam 3 pdf ppt Lecture Recording
Exam 3

Reading Material



The course consists of three main parts, covering respectively functional, concurrent, and logic programming. Evaluation for each part includes a programming assignment and a partial exam.

For functional programming, we will use Haskell and Oz. For concurrent programming, we will use SALSA and Erlang. For logic programming, we will use Prolog and Oz. You must understand both languages to be prepared for exams. However, you can choose any of the two supported programming languages per paradigm for programming assignments, or even your own (but do not expect help from the instructor or TAs if you choose your own). Programming assignments can be done either individually or in pairs. Do not show your code to any other group and do not look at any other group's code. Do not put your code in a public directory or otherwise make it public. You are encouraged to use the LMS Discussion Board to post questions so that other students can also answer/see the answers. There will be three grace days for late submissions throughout the semester, to be used in any combination of PAs, e.g., PA1 may be one day late and PA3 may be two days late, as long as PA2 was submitted on time. Late assignments beyond the three day grace period will receive a grade of 0.

Students may use for reference during exams: physical textbooks, printed course slides, and one personal crib sheet. No electronics will be allowed. All exam answers must be your own. Exam grades may be curved.

We will use the following weighting scheme for grades: The highest two programming assignment grades will have a total weight of 40% (20% each), while the third one will have a weight of 10%. We will use the same weighting scheme for partial exams: the highest two exam grades will be worth 40% of the total grade while the third one will count for 10% of the total grade. Final letter grades will then be assigned as follows:

Letter Grade Range
A [90-100]
A- [86.67-90)
B+ [83.33-86.67)
B [80-83.33)
B- [76.67-80)
C+ [73.33-76.67)
C [70-73.33)
C- [66.67-70)
D+ [63.33-66.67)
D [60-63.33)
F [0-60)

Academic Integrity

Student-teacher relationships are built on trust. For example, students must trust that teachers have made appropriate decisions about the structure and content of the courses they teach, and teachers must trust that the assignments that students turn in are their own. Acts that violate this trust undermine the educational process. The Rensselaer Handbook of Student Rights and Responsibilities and The Graduate Student Supplement define various forms of Academic Dishonesty and you should make yourself familiar with these. In this class, all assignments that are turned in for a grade must represent the student’s own work. In cases where help was received, or teamwork was allowed, a notation on the assignment should indicate your collaboration.

A grade of zero will be given on an assignment or exam where a violation of the Academic Integrity policy is detected. This violation will be reported to the Dean of Students, and if there is a prior infraction on file, the student will receive a grade of F for the course.

Violations of academic integrity may also be reported to the appropriate Dean (Dean of Students for undergraduate students or the Dean of Graduate Education for graduate students, respectively).

If you have any question concerning this policy before submitting an assignment, please ask for clarification. In addition, you can visit the following site for more information on our Academic Integrity Policy: Student Rights, Responsibilities, and Judicial Affairs..

Disability Services

Rensselaer Polytechnic Institute is committed to providing equal access to our educational programs and services for students with disabilities. If you anticipate or experience academic barriers due to a disability, please let me know immediately so that we can discuss your options. To establish reasonable accomodations, please register with The Office of Disability Services for Students. After registration, make arrangements with the Director of Disability Services as soon as possible to discuss your accomodations so that they may be implemented in a timely fashion. DSS contact information:; +1-518-276-8197; 4226 Academy Hall.

Disability Services for Students

Support Services

RPInfo - contains various links for students, academic resources, support services, and safety & emergency preparedness.

Rensselaer IT Services and Support Center

Last modified: Mon Aug 30 15:40:14 EDT 2021