Homework Assignments

All assignments are due by the start of lecture on their due date. Please submit your assignment in class, or directly to the instructor at any time prior to the due time.

Please use this Cover Sheet for all your assignments — print it double-sided and attach it to the front of your work. You should submit only one copy of your solution that lists each member of your group.

If you submit your assignment as a group, please also submit a peer evaluation report along with each assignment — each student must do this individually, as outlined in the document.

Assignment 1 (due Wed 28 Jan)

Assignment 2 (due Wed 25 Feb)

  • Assignment 2 Handout (PDF) updated at 22:26 on Sun 15 Feb — final version!
  • Assignment 2 Marking Codes (plain text) — including marker's comments. Each student who submitted code on CDF will receive a detailed marking report by email to their CDF account.

Tester programs used to grade your code

To see the results of our tests (used to generate part of your correctness grade), simply copy your own code and all of the tester files below to a separate directory (on CDF), then type sml test_<function>.sml to run the tests for <function> (e.g., sml test_squeeze.sml will run the tests for function squeeze). Note that there are two different testers for function compose, depending on whether your exception Negative was declared to take an argument or not.

Assignment 3 (due Wed 25 Mar)

Tester programs used to grade your code

To see the results of our tests for your ML functions (used to generate part of your correctness grade), simply copy your own code and all of the tester files below to a separate directory (on CDF), then type sml test_<function>.sml to run the tests for <function> (e.g., sml test_insert.sml will run the tests for function insert).

To see the list of test cases for your Prolog predicates (used to generate part of your correctness grade), have a look at the following files. All of these test cases were run manually by the marker.

Assignment 4 (due Wed 8 Apr)

Assignment guidelines

Assignments are to be completed in groups of no more than two individuals. You are strongly encouraged to find one partner and to work out the solutions together, rather than try to split up the work so that each person is "responsible" for one or two questions only. Remember that this is supposed to be the point of these group assignments: to give you a chance to work on problems together, so that you each learn more than by doing it yourself.
Also, splitting up the work may save time in the short term, but not in the long term: you will each have to go back and review each solution anyway, since everyone will be expected to understand how to solve each question for the midterm test as well as for the related questions on the final exam. More importantly, as you well know, there is a big difference between reading someone else's solution and working out a solution by yourself: you learn much more by "solving" than by "reading".
Nevertheless, I leave it up to each student to decide for themselves: this is for your own benefit, and you are free to take advantage of it or not, as you see fit.

If you would like to work with someone but you don't know anybody that could be your partner, you may post a "request for partner" message on the course bulletin board — and keep an eye out for similar posts by other students.

Have a look at this article about coping with team problems, to learn some strategies you can use if you run into difficulties with your group.