CS 2650 and 3000, but also:
Some mathematical maturity (at the level of "I've seen and done a few
proofs before") and (most importantly) a desire to learn!
We'll meet MWF from 2-2:55pm. Attendance in class is required.
Homework consists of programming assignments and
Blackboard quizzes. We'll have both a traditional
in-class midterm and a final.
Blackboard will be used to post quizzes and to report grades.
Up-to-date information on other aspects of the course
(assignment due dates, etc.) will be posted on this website
so check back frequently!
Programming Assignment DUE
Blackboard Quiz DUE
Unless otherwise noted, assignments and quizzes are due at 11:59pm.
Programming in Pyret
Intro. to programming languages
Intro. to programming in Pyret
W 8/30: Q0 Due
M 9/4: Holiday - NO CLASS
Reasoning About Programs
Structured data, general pattern-matching
Recursive and polymorphic datatypes
Lazy evaluation, streams
PAPL 7-9, PAPL 13
W 9/20: A1 Due: A1: Lists
More equational reasoning
Study for midterm!
T 10/10: Fall Semester Reading Day
F 10/13: In-Class Midterm
PL Through Interpreters
Representing programs: concrete vs. abstract syntax
S-expressions and our first interpreter
PAPL 23 and 24
W 10/18: Q3 Due
Interpreters continued, basic control flow
Let bindings, functions, desugaring
W 11/1: A3 Due: A3: Scheme0
Types and type-checking
F 11/10: Holiday - NO CLASS
Types and type-checking contd.
PAPL 27 (same as last week)
W 11/15: Q4 Due
F 11/17: EECS Departmental Retreat - NO CLASS
Type safety, preservation and progress
T 11/21: A4 Due: A4: Typed Scheme
W-F 11/22-24: Thanksgiving - NO CLASSES
Mutable state, references and reference types
Th 11/30: Q5 Due
Advanced programming languages
Other paradigms: Logic programming in Datalog
Sunday 12/10: A5 Due: A5: Typed Scheme Extended
12/11-15: Final Exam Period
(a) An ability to apply knowledge of computing and mathematics appropriate to the program's student outcomes and to the discipline. Students will be able to:
Design and implement structured data types to solve
Design and implement higher-order functions to solve
Use static scope to disambiguate identifiers in a program
Determine whether expressions in a programming
language are referentially transparent (invariant
under closing context)
Map evaluation criteria such as cost and safety to
programming language features such as dynamic and static type
Use pattern-matching to decompose and compute on structured data
Use recursion to write functions that manipulate recursive collection
types such as lists
(b) An ability to analyze a problem, and identify and define the computing requirements appropriate to its solution. Students will be able to:
Identify structured data types appropriate for modeling the information
computed by a particular application
(c) An ability to design, implement, and evaluate a computer-based system, process, component, or program to meet desired needs. Students will be able to:
Implement in Pyret a type-checker for an extended arithmetic expression language
Implement in Pyret an interpreter for an extended arithmetic expression language
Implement a small deductive database in Datalog
(j) An ability to apply mathematical foundations, algorithmic principles, and computer science theory in the modeling and design of computer-based systems in a way that demonstrates comprehension of the tradeoffs involved in design choices. Students will be able to:
Evaluate the tradeoffs, and appropriate uses of, concrete vs. abstract syntax
Reason about, and recognize the tradeoffs of, various definitions of program
equivalence in the presence of language features such as mutable references
Homework and Lateness Policy
Homework will usually be due Wednesdays by 11:59pm.
Late homework assignments will be penalized according to the following
- Up to 24 hours late: no deduction, for a max 2 late homeworks per
student across the entire semester
- Homeworks later than 24 hours, or from students who have already
turned in 2 late homeworks, will receive 0 points.
Academic Honesty Policy
Acceptable Collaboration Matrix
|Instructor/GA||Noninstructor (e.g., Another Student)|
|You||all collaboration allowed||high-level discussion
(of the problems, not your code!)
allowed but only after you've started the assignment;
must be documented in README as described below|
discuss the homework with other students in
the class, but only after you've attempted the problems on your own
first. If you do discuss the homework problems with others, write the
names of the students you spoke with, along with a brief summary of
what you discussed, in a README comment at the top of each
Name: Gordon Stewart
Collaboration: I spoke with X and Y. We swapped tips regarding the
use of lists in Pyret.
However, under no circumstances are you permitted
to share or directly copy code or other written homework material,
except with course instructors.
If I discover that you've cheated on an
assignment, you'll get an automatic 0 along with an immediate
referral to the
Office of Community Standards, which will likely
take disciplinary action against you.
Remember: homework is there to give *you* practice in
the new ideas and techniques covered by the course; it does you no
good if you don't engage!
In general, students in EECS courses such as this one must
adhere to the Russ College of Engineering and Technology Honor
Code, and to the OU
Student Code of Conduct. If you haven't ever read these documents,
please do so.
Students with Disabilities
If you suspect you may need an accommodation based on the impact of a
disability, please contact me privately to discuss your specific
needs. If you're not yet registered as a student with a disability,
contact the Office of Student