Potential midterm exam topics (and study checklist)
General Concepts
- types:
- static vs. dynamic typing
- type safety
- type inference
- terms with no generally-agreed on definition
("strongly typed language")
- polymorphism
- functional vs. imperative languages; functional subset of language
- higher-order functions
- aliasing
- closures
- equality vs. identity (and when it matters)
- compile time vs. run time
- recursion; tail recursion
- parameter passing:
- call by value
- call by result
- call by value/result
- call by reference
- call by name; lazy evaluation; thunks
Haskell
- functions, including higher-order functions, currying, and
anonymous functions
- lexical scoping
- types: polymorphic types; type inference, declarations;
user-defined types, including recursive types; type classes; inheritance
- referential transparency
- lazy evaluation; infinite data structures
- pattern matching
- list comprehensions
- monads; I/O in Haskell
- correct Haskell vocabulary (For example, "do" in Haskell defines a
block. Haskell does not have loops, assignments, or statements.)
- applicative vs. normal order evaluation
Scheme
- constructing and navigating list structures
- scoping issues (lexical scoping, global variables, parameters, let,
let*, environments)
- function definition; anonymous functions; special forms
- recursion; tail recursion
- eval and apply
- programs as data
- side effects in Scheme
Non-Topics
These topics won't be on the midterm (but may be on the final):
- metacircular interpreter
- Scheme macros; macro hygiene
- functions with variable number of arguments; improper lists
- quasi-quoting
- lexical vs. dynamic scoping
- exception handling