(define (foldr proc init lst) (if (null? lst) init (let ((result (foldr proc init (cdr lst)))) (cond ((equal? proc and) (and (car lst) result)) ((equal? proc or) (or (car lst) result)) (#t (proc (car lst) result))))))