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 Racket. Racket 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 Racket, which will cover a large subset of the Racket language itself.
This course assumes completion of CPSC 035.
Professor: Richard Wicentowski
Office: Science Center 251
Phone: (610) 690-5643
Office hours: Tuesday 1:00pm – 4:00pm, 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 Racket / Lists
|2||Jan 29||Recursion and Iteration
Section 1.2 - 1.2.2
|Jan 31||Drop/Add ends (Feb 01)||Abstractions with Higher Order Procedures
|Feb 07||Data Abstraction (Section 2.1)
Hierarchical Data (Section 2.2)
Sets and Trees (Section 2.3)
Data Representations (Section 2.4)
|5||Feb 19||Object Oriented Programming
Chapter 3 Introduction & Section 3.1
|6||Feb 26||Mutable Data
Learn You a Haskell for Great Good!
Real World Haskell
Haskell on wikibooks
Principles of Programming Languages
|Mar 28||Last day to declare CR/NC or W (Mar 29)|
|12||Apr 16||Interpreter Project
|Apr 18||Part 2
|13||Apr 23||Part 3|
|Apr 25||Part 4
|14||Apr 30||Part 5|
|May 02||Part 6
Grades will be weighted as follows:
|5%||Class Pariticipation and Attendance|
Lab assignments will typically be assigned in lab on Monday and be due the following Sunday evening at midnight. You are strongly encouraged to start early and ask questions early if you get stuck. Some labs may take a considerable amount of time, so you should begin working on assignments well before the due date.Most of the lab assignments will use the Racket programming language. You can download Racket for Mac, Windows, or Linux.
You are encouraged to work with a partner on all labs. You can work with a different partner each week except during the interpreter project when you must work with the same partner for 3 consecutive weeks.
Because we will discuss the solutions to lab assignments in class, late assignments will not normally be accepted; however, special exceptions can be made if you contact me well in advance of the deadline. Even if you do not fully complete an assignment, you should submit what you have done to receive partial credit.
You will submit you assignments electronically using the handin37 program. You may submit your assignment multiple times, but each submission overwrites the previous one and only the final submission will be graded.
Academic honesty is required in all work you submit to be graded. With the exception of your partner on lab 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 lab 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 lab 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 lab partner. You should always include detailed comments that indicates which parts of the lab 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, #297, #1270 and #312 (humorous, not helpful)