50.056 Software Abstraction Functional Programming

Course Description

This course introduces students to functional programming and how to construct software abstractions. Students learn how to compose functions and perform computation in a functional way. Higher order function will be taught as a way to abstract computation. The course then introduces students on how they can abstract data in functional programming. The students will be brought into a discussion of state-based computation and how it is best done to allow better testing and concurrency. In the later part of the course, students will learn how they can apply many these concepts to create meta circular evaluator and implement lazy evaluations. The course introduces many concepts that inspires various programming languages and, throughout, the idea of software abstraction is emphasised.

Pre-requisites
Learning Objectives
  • Learn functional programming concepts and principles
  • Create abstractions for computation and data
  • Discuss the effect of mutability in computation
  • Implement state-based and stream-processing approach in a functional way
  • Create metalinguistic abstraction
Measurable Outcomes

By the end of this course, students should be able to:

  • Use higher order functions to create abstraction for computations
  • Create abstraction to represent complex data
  • Discuss the advantages and disadvantages of assignment operator in imperative programming
  • Implement state-based model
  • Implement stream-processing approach for computing sequences and iterations
  • Create meta-circular evaluator
  • Discuss the advantages of lazy evaluations and implement it
Topics Covered
  • Introducing Functional Programming
  • Abstraction Using Functions
  • Data Abstraction
  • Generic Operations for Data Abstraction
  • Modeling State using Object
  • Stream-based Approach for State Computation
  • Metalinguistic Abstraction
  • Lazy Evaluation
Course Instructor(s)

Prof Oka KurniawanProf Kenny Lu