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 Section 1.1 Exercise 1.1 |
#1 | |
Jan 24 | ||||
2 | Jan 29 | Recursion and Iteration Section 1.2 - 1.2.2 |
#2 | |
Jan 31 | Drop/Add ends (Feb 01) | Abstractions with Higher Order Procedures Section 1.3 |
||
3 | Feb 05 | #3 | ||
Feb 07 | Data Abstraction (Section 2.1) Hierarchical Data (Section 2.2) Sets and Trees (Section 2.3) |
|||
4 | Feb 12 | #4 | ||
Feb 14 | Data Representations (Section 2.4) |
|||
5 | Feb 19 | Object Oriented Programming Chapter 3 Introduction & Section 3.1 |
#4a | |
Feb 21 |
Exam 1 |
|||
6 | Feb 26 | Mutable Data Section 3.3 |
#5 | |
Feb 28 | ||||
7 | Mar 05 | Streams Section 3.5 |
#6 | |
Mar 07 | ||||
Mar 12 |
Spring Break |
|||
Mar 14 |
||||
8 | Mar 19 | Haskell Learn You a Haskell for Great Good! Real World Haskell Haskell on wikibooks Principles of Programming Languages Book website |
#7 | |
Mar 21 | ||||
9 | Mar 26 | #8 | ||
Mar 28 | Last day to declare CR/NC or W (Mar 29) | |||
10 | Apr 02 | #9 | ||
Apr 04 | ||||
11 | Apr 09 | |||
Apr 11 |
Exam 2 |
|||
12 | Apr 16 | Interpreter Project Section 4.1 |
Part 1 | |
Apr 18 | Part 2 Extension A |
|||
13 | Apr 23 | Part 3 | ||
Apr 25 | Part 4 Extension B |
|||
14 | Apr 30 | Part 5 | ||
May 02 | Part 6 Extension C |
Grades will be weighted as follows:
30% | Labs |
45% | Exams |
20% | Final Project |
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.
Racket
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)