...
Code Block |
---|
(make-If true X Y) => X (make-If false X Y) => Y (make-If X true false) => X (make-If X Y Y) => Y (make-If X Y Z) => (make-If X Y\[X <\- true\] Z\[X <\- false\]) |
The notation M[X <- N]
means M
with all occurrences of the symbol X
replaced by the expression N
. It is very costly to actually perform these substitutions on NormIfExp
data. To avoid this computational expense, we simply maintain a list of bindings which are pairs consisting of symbols (variable names) and boolean values {true
, false
. The following data definition definition formally defines the binding
type.
...