Potential midterm exam topics (and study checklist)
General Concepts
- types:
- static vs. dynamic typing
- type safety
- type inference
- polymorphism
- overloading
- coercion
- functional vs. imperative languages; functional subset of language
- higher-order functions
- closures
- equality vs. identity (and when it matters)
- lexical vs. dynamic scoping
- compile time vs. run time
- recursion; tail recursion
Racket
- constructing and navigating list structures
- scoping issues (lexical scoping, global variables, parameters, let,
let*, letrec, environments)
- function definition; anonymous functions; special forms
- recursion; tail recursion
- eval and apply
- delayed evaluation
- programs as data
- side effects in Racket
- simulating objects in Racket
- Racket macros; macro hygiene
- functions with variable number of arguments; improper lists
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.)
- the Octopus interpreter (including the eval function, which environment
is used where, how Racket data is represented, and the role of the lexer
and parser)