Code Review

Compare your solutions

    #| BEGIN (Write your solution here) |#
(define (first-pred pred-seq) (car pred-seq))

(define (rest-preds pred-seq) (cdr pred-seq))

(define (no-preds? pred-seq) (eq? pred-seq '()))

(define (and-preds exp) (cdr exp))

(define (or-preds exp) (cdr exp))

 (define (eval-and-preds pred-seq env) 
   (let ((val (eval (first-pred pred-seq) env))) 
     (cond ((no-preds? (rest-preds pred-seq)) val) 
           ((not (true? val)) 'false) 
           (else (eval-and-preds (rest-preds pred-seq) env)))))

(define (eval-and exp env) 
   (let ((pred-seq (and-preds exp))) 
     (if (no-preds? pred-seq) 
         'true 
         (eval-and-preds pred-seq env))))  
  

(define (eval-or-preds pred-seq env) 
   (let ((val (eval (first-pred pred-seq) env))) 
     (cond ((no-preds? (rest-preds pred-seq)) val) 
           ((true? val) val) 
           (else (eval-or-preds (rest-preds pred-seq) env)))))

(define (eval-or exp env) 
   (let ((pred-seq (or-preds exp))) 
     (if (no-preds? pred-seq) 
         'false 
         (eval-or-preds pred-seq env))))
#| END |#