CS 381 � Programming Language Fundamentals 
Syllabus for Spring 2020 
CS 381, Programming Languages, is a four-credit course for undergraduate students. This course gives an 
introduction to the concepts found in a variety of programming languages and to languages from a number of 
different paradigms. Topics to be covered are: Haskell, Prolog, scoping, parameter passing, types, polymorphism, 
exception handling, semantics. 
Instructor: 
Dr. Martin Erwig 
Email:  
URL: oregonstate.edu/~erwig 
Office Hours (via Zoom): 
Mon 11am-noon https://oregonstate.zoom.us/j/959030437 
Wed 2pm-3pm https://oregonstate.zoom.us/j/305099643 
Teaching Assistants: 
Dhruv Jawalkar  
Parisa Ataei  
Chendi Zhang  
Office Hours (via Zoom): 
Mon 10am-11am https://oregonstate.zoom.us/j/155943334 
Tue 4:30pm-5:30pm https://oregonstate.zoom.us/j/551612998 
Thu noon-1:00pm https://oregonstate.zoom.us/j/154363027 
Mon Tue Wed Thu Fri 
10:00-11:00 DJ 
11:00-12:00 ME 
12:00-01:00 CZ 
02:00-03:00 ME 
04:30-05:30 PA 
Background reading material (optional): 
Concepts in Programming Languages 
John C. Mitchell, Cambridge University Press 2003 
Learning Objectives: On completion of the course, students should be able to perform the following tasks. 
1. Create functional programs using algebraic data types and recursive functions. 
2. Produce and explain the type and result of an expression in the context of functional programming. 
3. Produce an abstract syntax for a language given its concrete syntax. 
4. Create a denotational semantics for a language given its abstract syntax and an informal specification of its 
behavior. 
5. Produce and explain the behavior of a program under static vs. dynamic typing, and discuss the benefits 
and drawbacks of each approach. 
6. Produce and explain a program’s output under static vs. dynamic scoping of names. 
7. Produce and explain a program’s output under different parameter passing schemes, such as call-by-value 
vs. call-by-name vs. call-by-need. 
8. Create logic programs and express queries using predicates. 
Tentative Lecture Syllabus (subject to change): 
Learning Thursday 
Week Topic Objective Quiz 
1 Introduction, Haskell 1, 2 
2 Haskell 1, 2 3 
3 Haskell, Abstract Syntax 3 
4 Semantics 4 3 
5 Types 5, 2 
6 Review, Midterm Midterm 
7 Runtime Stack, Scoping 6 
8 Parameter Passing, Programming Paradigms 7, 1, 8 3 
9 Prolog 8 3 
10 Prolog 8 
Important dates 
Quizzes Apr 9, 23 Thu 2:00pm - 2:20pm 
Midterm Exam May 7 Thu 2:00pm - 3:00pm 
Quizzes May 21, 28 Thu 2:00pm - 2:20pm 
Final Exam June 11 Thu noon - 1:50pm 
Grading 
20% Quizzes 
20% Homework 
25% Midterm Exam 
35% Final Exam 
Note on Quizzes  Exams: Quizzes and exams are open book. 
Note on Homework: Teamwork on homework is allowed. Teams of up to five students can submit a common 
homework. All team members must be clearly identified on the submitted homework. All team members will 
receive the same points for that homework. All students in a team must contribute to a team solution. All team 
members must be able to explain their homework contribution to the instructor. 
Note on Zoom  Recordings: Please be aware that the lectures will be recorded and made available to other 
students. If you don’t want to be recorded, you should turn off your video camera when asking a question. 
Discussions in breakout rooms will not be recorded. 
Students with documented disabilities whomay need accommodations, who have any emergency medical information 
the instructor should know, or who need special arrangements in the event of evacuation, should make an appoint- 
ment with the instructor as early as possible, however, no later than the first week of the term. In order to arrange 
alternative testing the student should make the request at least one week in advance of the test. Students seeking 
accommodations should be registered with the Office of Services for Students with Disabilities.