Code Review

Compare your solutions

    #| BEGIN (Write your solution here) |#
(define (eval-or exp env)
  (define (eval-clauses clauses)
    (if (null? clauses)
        #f
        (let ((first (eval (first-exp clauses) env)))
          (if (true? first)
              first
              (eval-clauses (rest-exps clauses))))))
  (eval-clauses (or-clauses exp)))

(define (eval-and exp env)
  (define (eval-clauses clauses)
    (if (null? clauses)
        #t
        (let ((first (eval (first-exp clauses) env)))
          (if (false? first)
              #f
              (if (last-exp? clauses)
                  first
                  (eval-clauses (rest-exps clauses)))))))
  (eval-clauses (and-clauses exp)))

(define (false? x)
  (eq? x #f))

(define (or? exp) (tagged-list? exp 'or))
(define (and? exp) (tagged-list? exp 'and))

(define (or-clauses exp) (cdr exp))
(define (and-clauses exp) (cdr exp))
#| END |#