326.516: Functional Programming: Lisp


The course is an introduction to programming in Lisp and it will be based on the book:

Programming in Common Lisp, R. A. Brooks, John Wiley 1985.

The students will be expected to perform practical programming in Lisp. A lisp interpreter and an editor, as well as various source code can be downloaded from the ftp site.

Purpose

Understand the principles of functional programming and aquire the skills for writing Lisp programs.

Organization

The lecture takes place on

Fridays from 10:15 to 11:45 in T 642.

which will be the usual time and place for the lecture. If the lecture does not take place in a certain week, this will be announced on this page.

The final grade is 20% based on homeworks. Homeworks will be assigned every week and each one is due the next week. It is preferred to submit the homeworks in electronic form by e-mail, especially the Lisp code. Paper format is also accepted, especially if it contains drawings.

When you submit the homework by e-mail, please send it as attached file and use as name of the file your name and the number of the homework (examples: schreiner-hw-3.txt, mittermayr-hw-2.pdf) and use include the name of the file in the subject field of the e-mail.

Lectures

Lecture 1: Mar. 9: Book sections 1.1, 1.2:

- functional programming in relation to logic and to other programming styles;

- working with the Lisp interpretor and with emacs;

- list and s-expressions;

- car, cdr, cons.

Homework 1, due Mar 16: E1.2.1, E1.2.2.

Lecture 2: Mar. 16: Book sections 1.3 - 1.9.

Homework 2, due Mar 23: E1.3.1, E1.3.2; E1.5.1, E1.5.2, E1.5.3, E1.5.4; E1.9.1, E1.9.2.

Lecture 3: Mar. 23: Book sections 1.10 to end of chapt. 1 and book sections 2.1, 2.2.

Homework 2, due Apr 20: P1.1, P1.2, P1.3, P1.4, P1.5.

Mar. 30: No lecture.

Apr. 6: No lecture.

Apr. 13: No lecture.

Lecture 4: Apr. 20:Book sections 2.3, 2.4, 2.5.

Homework 3, due Apr 27: E2.1.1, E2.1.2; E2.2.1, E2.2.2, E2.3.1; E2.4.1; E2.5.1.

Lecture 5: Apr. 27:Book sections 2.6, 2.7, 2.8, 2.9, 2.10.

Homework 4, due May 11: E2.6.1, E2.7.1, E2.8.1, E2.8.2, E2.9.1, E2.9.2; P2.1, P2.2, P2.3, P2.4, P2.5, P2.6.

May 4: No lecture.

Lecture 6: May 11:

Book sections:3.1, 3.2.

Homework 5, due May 25: E3.1.1, E3.1.2, and P3.1.

May 17: No lecture.

Lecture 7: May 25:

Book sections: 3.3, 3.4, 3.5, 3.6.

Homework 6, due June 8: E3.3.1; E3.6.1, E3.6.2; P3.2, P3.3, P3.4, P3.5, P3.6.

June 1: No lecture.

Lecture 9: June 8:

Discussion on the Fibonacci algorithm: double recursion, tail recursion, iterative version.

Automatic transformation of simple tail recursive programs into iterative programs.

Book sections: 4.1, 4.2, 4.3; 5.1, 5.2, 5.3, 5.4; 6.1.

Homework 7, due June 15: E4.1.1; E4.2.1, E4.2.2; P4.1, P4.2, P4.3.

Lecture 10: June 15:

Small programming projects: nonconstructive merge-sort sort-in-place.el, a propositional prover propositional.el.

Homework 8, due June 22: hw-15-06-2007.pdf.

Lecture 11: June 22:

Solution to homeworks.

Programming projects: unification and a toy prolog interpreter: unification.el, unification-test.el, prolog.el, prolog-test.el, out-prolog.txt.

Examination: June 29:

Written examination consisting in simple questions about the Lisp languages, as well as programming tasks.

No. additional material will be allowed, but "memo.txt" will be distributed by me.


T. Jebelean