Course Level:Undergraduate  Units: 12  Special Permission Required: No (if yes, please see Notes) 
Frequency Offered: Generally offered every Fall & Spring, some summers  confirm course offerings for upcoming semesters by accessing the university Schedule of Classes. Course Relevance (who should take this course?): Intro level course to functional programming. Course Website: http://www.cs.cmu.edu/~15150/ 
Key Topics:  Background Knowledge:  Assessment Structure: 
 Recursion
 Specifications and Correctness Proofs
 Work and Span Analysis
 Parallelism
 Polymorphism
 Higherorder Functions
 Modular Programming
 Basic mathematical background such as ability to do proof by induction, and familiarity with the core mathematical structures of Computer Science, such as sets, relations, graphs, and trees. Sample class notes: None provided Sample Assignment: http://www.cs.cmu.edu/~15150/assign.html   Homework (35%)
 Labs (10%)
 Midterms (30%)
 Final (25%)
Sample Exam: None provided Sample Lecture Recording: Typically no recorded lectures 
Most Recent Syllabus: http://www.cs.cmu.edu/~15150 
Course Goals/Objectives: 
 Write welltyped functional programs using the language ML
 Develop specifications and prove program correctness using rigorous techniques
 Apply equational, evaluational, and compositional reasoning techniques, and use mathematical and structural induction in proofs
 Analyze sequential and parallel running time of programs using the concepts of work and span
 Develop cost graphs and recurrences from programs, and use them to derive asymptotic bounds on work and span
 Use abstract types and modules to structure code with clear and welldesigned interfaces
 Identify opportunities for parallelism in code and exploit parallelism by choosing appropriate data structures and function designs

Learning Resources  Prereqs, Cross list, Related  Notes 
 Lecture Notes by the course instructors
 Piazza forum for Q&A and discussions
 git to distribute homeworks
 There are also wellknown textbooks on introduction to functional programming in ML for those who seek additional resources.
  Prerequisites Required: (15151 or 21127 or 21128) and (15112 or 15122)
 Minimum Grades in Prereqs:
C in 15151, C in 21127, C in 15112  Corequisites: None
 Prerequisite for: 15210
 Antirequisites: None
 CrossListed: None
 Substitutes: 15122 for 15112, 21127 for 15151, 21128 for 21127, 15151 for 21127
 Related Courses: 15210
 Reservations: Priority given to undergraduates
 None 
Department Website:  College Website:  Updated November 2017 
https://www.csd.cs.cmu.edu  https://www.cs.cmu.edu/  Back to Course Profile List 