@@ -303,17 +303,17 @@ object LispAny extends Lisp {
303
303
def asBoolean (x : Data ): Boolean = x != 0
304
304
305
305
def normalize (x : Data ): Data = x match {
306
- case ' and :: x :: y :: Nil =>
307
- normalize(' if :: x :: y :: 0 :: Nil )
308
- case ' or :: x :: y :: Nil =>
309
- normalize(' if :: x :: 1 :: y :: Nil )
310
- case ' def :: (name :: args) :: body :: expr :: Nil =>
311
- normalize(' def :: name :: (' lambda :: args :: body :: Nil ) :: expr :: Nil )
312
- case ' cond :: (' else :: expr :: Nil ) :: rest =>
306
+ case Symbol ( " and" ) :: x :: y :: Nil =>
307
+ normalize(Symbol ( " if " ) :: x :: y :: 0 :: Nil )
308
+ case Symbol ( " or " ) :: x :: y :: Nil =>
309
+ normalize(Symbol ( " if " ) :: x :: 1 :: y :: Nil )
310
+ case Symbol ( " def" ) :: (name :: args) :: body :: expr :: Nil =>
311
+ normalize(Symbol ( " def" ) :: name :: (Symbol ( " lambda" ) :: args :: body :: Nil ) :: expr :: Nil )
312
+ case Symbol ( " cond" ) :: (Symbol ( " else" ) :: expr :: Nil ) :: rest =>
313
313
normalize(expr);
314
- case ' cond :: (test :: expr :: Nil ) :: rest =>
315
- normalize(' if :: test :: expr :: (' cond :: rest) :: Nil )
316
- case ' cond :: ' else :: expr :: Nil =>
314
+ case Symbol ( " cond" ) :: (test :: expr :: Nil ) :: rest =>
315
+ normalize(Symbol ( " if " ) :: test :: expr :: (Symbol ( " cond" ) :: rest) :: Nil )
316
+ case Symbol ( " cond" ) :: Symbol ( " else" ) :: expr :: Nil =>
317
317
normalize(expr)
318
318
case h :: t =>
319
319
normalize(h) :: asList(normalize(t))
@@ -342,15 +342,15 @@ object LispAny extends Lisp {
342
342
def eval1 (x : Data , env : Environment ): Data = x match {
343
343
case Symbol (name) =>
344
344
env lookup name
345
- case ' def :: Symbol (name) :: y :: z :: Nil =>
345
+ case Symbol ( " def" ) :: Symbol (name) :: y :: z :: Nil =>
346
346
eval(z, env.extendRec(name, (env1 => eval(y, env1))))
347
- case ' val :: Symbol (name) :: y :: z :: Nil =>
347
+ case Symbol ( " val" ) :: Symbol (name) :: y :: z :: Nil =>
348
348
eval(z, env.extend(name, eval(y, env)))
349
- case ' lambda :: params :: y :: Nil =>
349
+ case Symbol ( " lambda" ) :: params :: y :: Nil =>
350
350
mkLambda(params, y, env)
351
- case ' if :: c :: y :: z :: Nil =>
351
+ case Symbol ( " if " ) :: c :: y :: z :: Nil =>
352
352
if (asBoolean(eval(c, env))) eval(y, env) else eval(z, env)
353
- case ' quote :: y :: Nil =>
353
+ case Symbol ( " quote" ) :: y :: Nil =>
354
354
y
355
355
case y :: z =>
356
356
apply(eval(y, env), z map (x => eval(x, env)))
0 commit comments