Com S 641 meeting -*- Outline -*- * initial environments ------------------------------------------ BUILT-INS VS. INITIAL ENVIRONMENT We have +, not, etc built-in [[ not E ]] env s = not([[E]] env s) [[ E1 + E2]] env s = plus([[E1]] env s, [[E2]] env s) Alternative ------------------------------------------ ... pi0 = { ("not", bool -> bool), ("+", int -> int -> int) } env0 = { ("not", \b -> not b), ("+", \n -> \m -> plus(n,m)) } [[ not E ]] env s = f ([[E]] env s) where ("not", f) in env [[ E1 op E2 ]] env s = f ([[E1] env s) ([[E2]] env s) where (op, f) in env Q: Does this allow users to redeclare "not"? Is that good? Q: What does this change about the meaning of a program? has to take an initial environment so it becomes more like a block