Pre-requisites
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
Date | Topic | Handouts | Chapter/Section |
---|---|---|---|
08/29 | Introduction to programming languages: history, essentials, syntax, semantics, paradigms. | slides(pdf) slides(ppt) functions.hs functions.oz | PDCS Chapter 2 |
09/01 | Lambda calculus: alpha-renaming, beta-reduction, applicative and normal evaluation orders, Church-Rosser theorem, combinators, booleans | slides(pdf) slides(ppt) combinators.oz combinators.hs eta.oz eta.hs whiteboard.jpg | PDCS Chapter 2 |
09/08 | Lambda calculus: higher order programming, eta-conversion,
recursion combinator, numbers, Church numerals |
slides(pdf) slides(ppt) hop.oz hop.hs lambda-booleans.oz lambda-booleans.hs lambda-numbers.oz lambda-numbers.hs rec.oz seq.oz whiteboard.jpg | PDCS Chapter 2 |
09/12 | Functional programming: lists, records, pattern matching,
recursion (Haskell, Oz) Programming Assignment 1 Due 09/25 |
slides(pdf) slides(ppt) Programming Assignment #1.pdf comb.oz comb.hs lists.oz lists.hs nth.oz nth.hs pascal.oz pascal.hs whiteboard.jpg | CTM Sections 1.1-1.7, 3.2, 3.4.1-3.4.2, 4.7.2 |
09/15 | Higher order programming: closures, procedural abstraction, genericity, instantiation, embedding. | slides(pdf) slides(ppt) sqrt.hs sqrt.oz pascal.hs pascal.oz nth.hs nth.oz iterate.hs | CTM Sections 3.2 and 3.6.1 |
09/19 | Control abstractions: map, reduce, iterate, fold, filter | slides(pdf) slides(ppt) explicit-lazy.oz mapreduce.oz mapreduce.hs iscombinator.oz iscombinator.hs whiteboard.jpg | CTM Sections 1.9, 3.6, and 4.7 |
09/22 | Lazy evaluation, infinite data structures, set comprehensions | slides(pdf) slides(ppt) lazy-eval.oz lazy-eval.hs iscombinator.oz iscombinator.hs whiteboard.jpg(1) whiteboard.jpg(2) | CTM Sections 1.8 and 4.5 |
09/26 | Type checking and type inference, abstract data types, monads | slides(pdf) slides(pptx) stack.oz stack.hs lazy-sqrt.oz count-monad.hs list-monad.hs type-limitations.hs | EPL Chapter 4, GIH Chapter 9, and CTM Sections 2.8.3 and 3.7 |
09/29 | Review for Exam 1 | ||
10/03 |
Exam 1 | ||
10/06 | Actors: a model of concurrent computation | slides(pdf) slides(pptx) | PDCS Chapter 4 |
10/10 | Actor programming languages (SALSA, Erlang) | slides(pdf) slides(ppt) cell.erl cellTester.erl treeprod.erl cell-treeproduct.zip Cell.salsa CellTester.salsa Tree.java TreeProduct.salsa TreeProductTester.salsa | PDCS Chapter 9 and CPE Chapter 5 |
10/13 | Concurrency control abstractions Programming Assignment 2 Due 10/26 |
slides(pdf) slides(ppt) fibonacci.erl fibonacci.zip Calculator.salsa Fibonacci.salsa Programming Assignment #2.pdf | PDCS Chapter 9 and CPE Chapter 5 |
10/17 | Distributed systems abstractions |
slides(pdf) slides(ppt) theatersFile.txt addressbook-dcell-dsquares.zip addressbook.erl addressbook_client.erl dcell.erl dcellClient.erl dcellTester.erl squares.erl dsquares.erl AddressBook.salsa AddUser.salsa GetEmail.salsa GetName.salsa readme.txt Cell.salsa CellTester.salsa GetCellValue.salsa squares/Square.salsa squares/SumSquares.salsa dsquares/Square.salsa dsquares/SumSquares.salsa | PDCS Chapter 9 and CPE Chapter 6 |
10/20 |
Mobility (SALSA) and fault-tolerance (Erlang) abstractions; garbage collection, visualization (SALSA), hot code loading (Erlang) | slides(pdf) slides(pptx) migrate.zip addressbook_exception.erl Migrate.salsa MigrateBook.salsa MovingCellTester.salsa | PDCS Chapter 9 and CPE Chapter 7 |
10/24 | Declarative concurrency: dataflow variables, suspendable statements (Oz) | slides(pdf) slides(ppt) dconcurrency.oz | CTM Sections 1.10-1.16, 4.1-4.4, and 4.6 |
10/27 | Object-oriented programming: inheritance, polymorphism (Oz, Java) | slides(pdf) slides(ppt) oop.oz java_dd_mm.zip | CTM Sections 6.1-6.4, 7.1, and 7.2 |
10/31 | Review for Exam 2 | ||
11/03 |
Exam 2 | ||
11/07 |
Predicate calculus, first-order logic, Horn clauses, Clocksin-Mellish procedure. | slides(pdf) slides(ppt) students.pl | PLP Chapter 11 |
11/10 |
Terms, resolution, unification, search, backtracking (Prolog); Relational computation model (Oz). | slides(pdf) slides(ppt) rainy.pl rainy.oz students2.pl students.oz clocksin-mellish1.jpg clocksin-mellish2.jpg | PLP Chapter 11 and CTM Section 9.1 |
11/14 |
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 11/30 |
slides(pdf) slides(ppt) append.oz append.pl cut.pl cut2.pl cut3.pl cut4.pl cut5.pl family.oz family.pl studentsir.pl infiniteRegression.jpg NaturalSearchTree.jpg AppendFunction.jpg Programming Assignment #3.pdf prolog-pa3-start.zip oz-pa3-start.zip | PLP Chapter 11 and CTM Section 9.3 |
11/17 |
Constraint satisfaction problems: propagate-and-search; natural language parsing: definite clause grammars | slides(pdf) slides(ppt) digit.pl digit.oz sentences.pl sentences2.pl sentences3.pl sentences.oz sentences2.oz sentences3.oz constraints.pl constraints.oz crossword.pl crossword.oz propagate-search.pl propagate-search.oz | PLP Chapter 11 and CTM Sections 9.2, 9.4, 12.1, and 12.2 |
11/21 | Prolog I/O, equalities, types, operators; Knowledge bases: assert, retract |
slides(pdf) slides(ppt) member.pl member.oz tictactoe.pl browse.pl graph-db.oz | PLP Chapter 11 and CTM Section 9.6 |
11/28 | Accumulators, difference lists |
slides(pdf) slides(ppt) accumulators.oz accumulators.pl dlists.oz dlists.pl nestedloop.pl insertsort.pl | CTM Sections 3.4.3 and 3.4.4 |
12/01 | Constraint programming: computation spaces |
slides(pdf) slides(ppt) rectangle.oz palindrome.oz sendmoremoney.oz | CTM Sections 12.3-12.5 |
12/05 | Review for Exam 3 | ||
12/08 |
Exam 3 |
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) |
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.
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..
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: dss@rpi.edu; +1-518-276-8197; 4226 Academy Hall.
Disability Services for Students
RPInfo - contains various links for students, academic resources, support services, and safety & emergency preparedness.
Rensselaer IT Services and Support Center