ML is a modern functional programming language which is in increasing use for production-quality software. We will be using an implementation of Standard ML on the Sun workstations owned by the CS department. For those who would like to use it, there is a public-domain version available for the Macintosh. Unfortunately, the error messages are not as good with that version.
Apple Computer added object-oriented extensions to Pascal in order to build its innovative graphical operating system in 1984. In the second half of the course we will use these extensions, which are built into the Think Pascal compiler.
Students will be expected to write several programs, ranging from very short programs to more elaborate systems. Since one of our goals in this course is to teach you how to write large, reliable programs composed from reusable pieces, we will be emphasizing the development of clear, modular programs that are easy to read, debug, verify, analyze, and modify. We will emphasize the use of rapid prototyping to quickly check out flaws in program designs.
Programs are due by 11:59pm on the date due (though I typically don't impose the grade penalty for a program turned in within an hour of the deadline). There will be a penalty assessed of 2^n % for a program which is n days late. Programs will not be accepted more than five days late. It is usually better to turn in a correct program one or two days late than a non-functioning program on time. See the attached Department policy statement on late work. All programs must be turned in to avoid a grade of failure in the course.
There will be two in-class midterm exams, tentatively scheduled for Thursday, 10/20, and Thursday, 11/17, plus a scheduled final exam. Homework exercises (non-programming assignments) will be assigned and collected in class periodically. The grading will be weighted as follows:
Day Topic ----------------------------------------------------------------kim@cs.williams.edu
- 9/12 Introduction and Overview, Intro to ML
- 9/14 ML - expressions, basic data types, and functions
- 9/16 Complex data types: tuples, records, and lists
- 9/19 Pattern matching, type inference, and polymorphism
- 9/21 Mathematical induction and correctness
- 9/23 Sorting
- 9/26 More sorting and efficiency
- 9/28 User-defined data types
- 9/30 Abstypes
- 10/3 Stacks
- 10/5 Stacks - applications
- 10/7 Queues
- 10/10 Binary trees
- 10/12 Binary trees - applications
- 10/14 More Binary trees ----------------------------------------------------------------- 10/17 Fall Reading Period -----------------------------------------------------------------
- 10/19 Binary search trees ----------------------------------------------------------------- 10/20 Hour Exam I -----------------------------------------------------------------
- 10/21 Structures, signatures, and functors
- 10/24 What is object-oriented programming?
- 10/26 Objects in Think Pascal
- 10/28 Lists as objects
- 10/31 More lists
- 11/2 More lists
- 11/4 More lists & intro to stacks
- 11/7 Stacks and Queues
- 11/9 Trees & Binary search trees
- 11/11 Trees: Heaps and Priority Queues
- 11/14 HeapSort
- 11/16 Graphs I: Specification and Applications ----------------------------------------------------------------- 11/17 Hour Exam II -----------------------------------------------------------------
- 11/18 Graphs II: More Applications and Implementations
- 311/21 Graphs III: More Applications and Implementations
- 11/23 Graphs IV: More Implementations ----------------------------------------------------------------- Thanksgiving -----------------------------------------------------------------
- 11/28 Balanced trees
- 11/30 Tables ADT
- 12/2 More tables, Hashing I
- 12/5 Hashing II
- 12/7 Building a better mousetrap (or OOL)
- 12/9 Summary: Data Structures, prototyping, functional and object-oriented languages