(define eval-and-exp (lambda (exp-list env) (if (null? exp-list) 1 (let ((val (eval-expression (car exp-list) env))) (if (true-value? val) (eval-and-exp (cdr exp-list) env) 0))))) (define eval-or-exp (lambda (exp-list env) (if (null? exp-list) 0 (let ((val (eval-expression (car exp-list) env))) (if (true-value? val) 1 (eval-and-exp (cdr exp-list) env)))))) (expression ("eval" "(" expression ")") eval-exp) (eval-exp (exp) (eval-program (scan&parse (eval-expression exp env)))) define swap = fn(a, b) [let (tmp = ^a) in {set a = ^b; set b = tmp;}]