# Topics #
These topics are organized in two ways: by their content, and by the
week in which they were introduced.
## Topics by content ##
* [[What is computation?|topics/week3_what_is_computation]]
* Functional Programming
* [[Introduction|topics/week1 kapulet intro]]
* [[Week 1 Advanced notes|topics/week1 kapulet advanced]]
* [["Rosetta Stone" page #1 for Kaupulet, Scheme, OCaml, Haskell|rosetta1]]
* Offsite links for help on [[learning Scheme]], [[OCaml|learning OCaml]], and [[Haskell|learning Haskell]]
* [[List Comprehensions|topics/week3 lists#comprehensions]]
* [[Unit and its usefulness|topics/week3 unit]]
* More tips on using Scheme
* Types in OCaml and Haskell (will be posted soon)
* Practical advice for working with OCaml and/or Haskell (will be posted soon)
* Order, "static versus dynamic"
* [[Order in programming languages and natural language|topics/week1 order]]
* [[Reduction Strategies and Normal Forms in the Lambda Calculus|topics/week3_evaluation_order]]
* [[Unit and its usefulness|topics/week3 unit]]
* The Untyped Lambda Calculus
* [[Introduction to the Lambda Calculus|topics/week2 lambda intro]]
* [[Advanced notes on the Lambda Calculus|topics/week2 lambda advanced]]
* Encoding data types in the Lambda Calculus
* [[Booleans|topics/week2 encodings#booleans]]
* [[Tuples|topics/week2 encodings#tuples]]
* [[Lists|topics/week2 encodings#lists]], v1 (as right-folds)
* [[Numbers|topics/week2 encodings#numbers]], v1 ("Church's encoding")
* [[Arithmetic with Church numbers|topics/week3_church_arithmetic]]
* [[How to get the `tail` of v1 lists?|topics/week3 lists#tails]]
* [[Some other list encodings|topics/week3 lists#other-lists]]
* [[Reduction Strategies and Normal Forms|topics/week3_evaluation_order]]
* [[Fixed point combinators|topics/week4_fixed_point_combinators]]
* [[More about fixed point combinators|topics/week4_more_about_fixed_point_combinators]]
* [[Combinatory Logic|topics/week3 combinatory logic]]
* Typed Lambda Calculi
* [[Simply-typed lambda calculus|topics/week5 simply typed]] (will be updated)
* [[System F|topics/week5 system F]] (will be updated)
* Types in OCaml and Haskell (will be posted soon)
## Topics by week ##
Week 1:
* [[Order in programming languages and natural language|topics/week1 order]]
This discussion considers conjunction in a language that recognized presupposition failure.
* [[Introduction to functional programming|topics/week1 kapulet intro]]
Basics of functional programming: `let`, `case`, pattern matching, and
recursion. Definitions of factorial.
* [[Advanced notes on functional programming|topics/week1 kapulet advanced]]
* [[Homework for week 1|exercises/assignment1]] ([[Answers|exercises/assignment1_answers]])
Week 2:
* [[Introduction to the Lambda Calculus|topics/week2 lambda intro]]
* [[Advanced notes on the Lambda Calculus|topics/week2 lambda advanced]]
* [[Encoding Booleans, Tuples, Lists, and Numbers|topics/week2 encodings]]
* [[Homework for week 2|exercises/assignment2]] ([[Answers|exercises/assignment2_answers]])
Week 3:
*These notes were developed over the course of the week. It'd be a good idea to review them again now, to be sure you've read all the content.*
* [[Arithmetic with Church numbers|topics/week3_church_arithmetic]]
* [[More on Lists|topics/week3 lists]]
Introduces list comprehensions, discusses how to get the `tail` of lists in the Lambda Calculus, and some new list encodings
* [[What is computation?|topics/week3_what_is_computation]]
* [[Reduction Strategies and Normal Forms|topics/week3_evaluation_order]] (posted on Monday 23 Feb)
* [[Unit and its usefulness|topics/week3 unit]]
* [[Combinatory Logic|topics/week3 combinatory logic]]
* [[Homework for week 3|exercises/assignment3]] ([[Answers|exercises/assignment3_answers]])
Week 4:
* [[Fixed point combinators|topics/week4_fixed_point_combinators]]
* [[More about fixed point combinators|topics/week4_more_about_fixed_point_combinators]]
* Towards types (in progress)
* [[Homework for week 4|exercises/assignment4]]
Week 5:
*Note*: Jim will be updating and expanding the lecture notes by Tuesday, but doesn't want to delay any longer letting you have access to the drafts we (in part) presented from in seminar. But do come back and re-read the pages when the expanded versions are posted.
* [[Simply-typed lambda calculus|topics/week5 simply typed]]
* [[System F|topics/week5 system F]]
* Types in OCaml and Haskell (will be posted soon)
* Practical advice for working with OCaml and/or Haskell (will be posted soon)
* [[Homework for weeks 5 and 6|exercises/assignment5]]