@@ -121,7 +121,7 @@ def standard_env() -> Environment:
121121# tag::REPL[]
122122def repl (prompt : str = 'lis.py> ' ) -> NoReturn :
123123 "A prompt-read-eval-print loop."
124- global_env = standard_env ()
124+ global_env = Environment ({}, standard_env () )
125125 while True :
126126 ast = parse (input (prompt ))
127127 val = evaluate (ast , global_env )
@@ -140,10 +140,7 @@ def lispstr(exp: object) -> str:
140140################ Evaluator
141141
142142# tag::EVALUATE[]
143- KEYWORDS = {'quote' , 'if' , 'lambda' , 'define' , 'set!' }
144- 145- def is_keyword (s : Any ) -> bool :
146- return isinstance (s , Symbol ) and s in KEYWORDS
143+ KEYWORDS = ['quote' , 'if' , 'lambda' , 'define' , 'set!' ]
147144
148145def evaluate (exp : Expression , env : Environment ) -> Any :
149146 "Evaluate an expression in an environment."
@@ -161,17 +158,13 @@ def evaluate(exp: Expression, env: Environment) -> Any:
161158 return evaluate (alternative , env )
162159 case ['lambda' , [* parms ], * body ] if body :
163160 return Procedure (parms , body , env )
164- case ['define' , Symbol (var ), value_exp ]:
165- env [var ] = evaluate (value_exp , env )
161+ case ['define' , Symbol (name ), value_exp ]:
162+ env [name ] = evaluate (value_exp , env )
166163 case ['define' , [Symbol (name ), * parms ], * body ] if body :
167164 env [name ] = Procedure (parms , body , env )
168- case ['set!' , Symbol (var ), value_exp ]:
169- env .change (var , evaluate (value_exp , env ))
170- < << << << HEAD
165+ case ['set!' , Symbol (name ), value_exp ]:
166+ env .change (name , evaluate (value_exp , env ))
171167 case [func_exp , * args ] if func_exp not in KEYWORDS :
172- == == == =
173- case [func_exp , * args ] if not is_keyword (func_exp ):
174- >> >> >> > 3 ecfb212c6273122797c76876d6b373b2cb94fa6
175168 proc = evaluate (func_exp , env )
176169 values = [evaluate (arg , env ) for arg in args ]
177170 return proc (* values )
@@ -202,7 +195,7 @@ def __call__(self, *args: Expression) -> Any: # <3>
202195################ command-line interface
203196
204197def run (source : str ) -> Any :
205- global_env = standard_env ()
198+ global_env = Environment ({}, standard_env () )
206199 tokens = tokenize (source )
207200 while tokens :
208201 exp = read_from_tokens (tokens )
0 commit comments