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 3:05-4pm. 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.
Intro. to programming languages
Intro. to functional programming in Pyret
Th 8/29: Q0 Due
M 9/2: Holiday - NO CLASS
Structured data, pattern-matching, recursive and polymorphic types
PAPL 7-9, PAPL 15
W 9/11: Q1 Due
PL Through Interpreters
Syntax, grammars, parsers, and S-expressions
W 9/25: Q2 Due
F 10/4: Fall Break (NO CLASS)
Our first interpreter, basic control flow
PAPL 24 and 25
F 10/11: In-Class Midterm
Types and type-checking
Th 10/31: Q3 Due
Mutable state, references and reference types
M 11/4: A3 Due: A3: Types
Programming language semantics
W 11/13: Q4 Due
M 11/11: Holiday - NO CLASS
Programming language semantics (contd.)
W 11/20: A4 Due: A4: Grumpy1
Type safety, preservation and progress
W-F 11/27-12/1: Thanksgiving Break - NO CLASSES
Wed 12/11: Final Exam (12:20pm in Walter 145)
1. An ability to analyze a complex computing problem and to apply principles of computing and other relevant disciplines to identify solutions. Students will be able to:
Design and implement structured data types to solve
Design and implement higher-order functions to solve
Use pattern-matching to analyze and compute on structured data
Use recursion to write functions that manipulate recursive collection
types such as abstract syntax trees and lists
Use polymorphism to implement a generic
collection type such as a symbol table
Analyze and reason equationally about a functional program in order to prove
6. An ability to apply computer science theory and software development fundamentals to produce computing-based solutions. Students will be able to:
Apply understanding of grammars and syntax trees to implement a parser for an extended arithmetic expression language that conforms to a BNF specification
Apply understanding of inductively defined data types, pattern-matching, recursion, and programming language semantics to implement an interpreter for an extended arithmetic expression language
Apply understanding of type systems, type judgments, and inductively defined typing rules to implement a type checker for an extended arithmetic expression language
Apply understanding of programming language design and implementation to extend an existing implementation of a language (parser, type checker, interpreter) to support new language features such as higher-order functions, mutable references, or closures
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/TA||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, an immediate F for the course, and a direct
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.
I grade programming assignments on a 4-point scale, as follows:
|Grade||Meaning||Corresponding Letter Grade|
|4||Excellent in all respects (demonstrating mastery)||A|
|3||Good in most respects (demonstrating understanding)||B|
|2||Adequate but lacking in some respects (demonstrating some lack of understanding)||C|
|1||Lacking in many respects (demonstrating severe lack of understanding)||D|
|0||No assignment submitted||F|
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