Working through "Essentials of Programming Languages" by Daniel P. Friedman and Mitchell Wand.
Inductive Sets :- 3 forms of induction: top-down, bottom-up, rules of inference
Context-Free Grammars :-
Recursive Functions :-
Specifying Data via Interfaces :-
Representation Strategies for Data Types :-
The Environment Interface :-
Procedural Representation :- The key to why this works is closures. In the Environment interface example, empty-env and extend-env both return functions that behave as apply-env would with the given argument. Since each closure saves the state of its lexical scope from when it was invoked, we can model the environment as it is built up.
Interfaces for Recursive Data Types :- One constructor for each kind of data in the recursive data type. One Predicate for each kind of data in the data type. One extractor for each kind of data that's an argument to a constructor.
Concrete Syntax vs Abstract Syntax and its Representation :-l