CSC244/444: Logical Foundations of AI

Instructor: Len Schubert
TA: Adam Purtee
TA Office Hours: Fridays, 10am-12pm in CSB 724.
Email: apurtee at cs

Current Homework Assignments:


Submitting Assignments


All written assignments must be put in my mailbox (in the CS mailroom - CSB727) before the time the assignment is due, or submitted in person during the relevant class meeting.

For each programming assignment, your submission must include the following three separate files (or face grade penalties):

Additionally, programming assignments should be submitted to me via the TURN_IN script:

Homework Guidelines


Generally, source code accounts for about 55%; your test file, writeup, and coding style account for about 45% of the total mark of an assignment.

Code Style

Please comment your code thoughtfully:

You should follow the usual good programming style, giving the functions and variables meaningful names and avoiding obscure programming constructs.

Try to keep your Lisp code to 80 characters or less per line, and indent meaningfully. Sometimes it's tricky, and sometimes it doesn't work, but most of the time it isn't difficult to do so. A bonus is that such formatting makes it easier to to fit two or three vertical windows in emacs on your screen at once.

I should not have to modify any of your source code to grade your submission, especially not to get it loaded into a REPL.

Test File

Testing is important. The test file is worth about half as many marks as the code. Include test cases for each problem, and make your test file (*_test.lisp) executable in Allegro Common Lisp. A good, modular test framework for Lisp can be found in Practical Common Lisp.

The basic idea is to print, for each test case:

Make sure you discuss your test cases in the test file. You can use the form of a comment for every test case or write a commented paragraph before each function describing your test strategy for the function (Unless it is a trivial function.)

I should be able to tell, after reading your testing document, how well you understood the problem.

Make sure to test all boundary cases (e.g., empty list, symbols, non-empty lists); If you don't, I will, and your program will probably fail with a REPL breaking Lisp error.

Writeups / README files

Please include the following in your writeup:

Also, if you're running out of time and cannot implement something, describe in more detail how you would have done it - you may get some credit for this, too.

Late Assignments

Late assignments will sometimes be accepted, with a 10%-15% reduction in grade for every day late. Submissions will no longer be accepted once it is necessary for me to distribute grades or discuss solutions. I may refuse to accept severely late assignments [ >2 days ], depending on the time required to grade the particular assignment.

Grade Appeal

If you wish to appeal your mark on an assignment, you must do so within five weekdays of receiving your mark by email. No appeals will be accepted after this period. In addition, when presenting your appeal request, you must submit a written statement of why you contest your mark and which questions you'd like me to re-evaluate. Appeals will not be accepted without your written statement.

Things Related to Lisp


Practical Common Lisp Free online book. Accessible, less technical than most. Good for getting an easy intro to Lisp.

Paradigms of AI Programming - very nice book, worth referring to especially when trying to make a particular program work or work more efficiently.

For gritty details of specific functions, try Googling the function name + clhs, and following the top result. Ex., "rplaca clhs".

On the research network, I use Allegro. The documentation for Allegro is pretty good. It's a good place to look for information about compiling, profiling, and developing with Lisp in the IDE Allegro Composer. It also explains how to run Lisp programs as command line scripts . The Allegro executable on our network is '/usr/staff/bin/alisp'.

On my machine at home, I use CLISP. It's free and open source.