This course will emphasize abstraction techniques necessary for designing large and complex programs.
Instead of more a common language like C, Java, or Python, we will be using a dialect of Lisp called Scheme. Scheme allows programming abstractions to be constructed more simply than is possible in a language like C. This power will let us deal with core computer science concepts without focusing on idiosyncratic syntactic details of the language.
The topics we will cover in this class include functional programming, recursion, data abstraction, higher-order functions, lists, trees, and sets, object-oriented programming, binding and scope. The course culminates in the development and implemention of an interpreter, written in Scheme, which will cover a large subset of the Scheme language itself.
Class periods will contain both lecture and hands-on components. For this reason, attendance will be taken at each class.
This course assumes completion of CPSC 035.
Professor: Richard Wicentowski
Class Time: Tues/Thurs 1:15-2:30
Location: Science Center 240
Office: Science Center 251
Phone: (610) 690-5643
Office hours: Wednesday 9:30-11:30 am, and by appointment
In the schedule below, the reading listed next to each day is the reading that we will be discussing in class on that day, not that night's reading assignment. You must come to class having already done the reading listed next to each day.
|WEEK||DAY||ANNOUNCEMENTS||TOPIC & READING||LAB|
|1||Jan 22||Basic Scheme / Lists
|2||Jan 29||Recursion and Iteration
Section 1.2 - 1.2.2
|Jan 31||Last Day to Add/Drop (Feb 01)||#2|
|3||Feb 05||Abstractions with Higher Order Procedures
|4||Feb 12||Data Abstraction (Section 2.1)
Hierarchical Data (Section 2.2)
Sets and Trees (Section 2.3)
Data Representations (Section 2.4)
|6||Feb 26||Object Oriented Programming
Chapter 3 Introduction & Section 3.1
|Mar 06||Mutable Data
|8||Mar 18||Mutable Data
Section 3.3 (continued) (continued)
* OCaml reference book (Ch 2)
* Programming Languages (PDF)
|12||Apr 15||Interpreter Project
|Apr 17||Part 2
|13||Apr 22||Part 3|
|Apr 24||Part 4
|14||Apr 29||Part 5|
|May 01||Part 6
Grades will be weighted as follows:
|5%||Class Pariticipation and Attendance|
Homework assignments will generally be assigned in Thursday's class and will typically be due the midnight before the next Thursday's class.
You are encouraged to work with a partner on all assignments.
You will submit your homework electronically using the handin37 program. You may submit an assignment multiple times, each submission overwriting the previous one. Only the final submission will be graded.
Late work will not be accepted except in extreme situations and only if you contact me well in advance of the deadline. Even if you do not fully complete an assigment, you may submit what you have done to receive partial credit.
Academic honesty is required in all work you submit to be graded. With the exception of your partner on assignments, you may not submit work done with (or by) someone else, or examine or use work done by others to complete your own work. You may discuss assignment specifications and requirements with others in the class to be sure you understand the problem. In addition, you are allowed to work with others to help learn the course material. However, with the exception of your lab partner, you may not work with others on your assignments in any capacity.
All code you submit must be your own with the following permissible exceptions: code distributed by me as part of the class, code found in the course text book, and code worked on with your assignment partner. You should always include detailed comments that indicates which parts of the assignment you received help on, and what your sources were.
Please see me if there are any questions about what is permissible.
Below are some external links which may be helpful to you.
How to Design Programs by Felleisen, Findler, Flatt and Krishnamurthi
Concrete Abstractions by Hailperin, Kaiser and Knight
The Scheme Programming Language by Dybvig
xkcd #224 and #297 (humorous, not helpful)