Code: Select all
(define (remove x xs)
(let loop ((xs xs) (zs '()))
(cond ((null? xs) (reverse zs))
((equal? (car xs) x) (loop (cdr xs) zs))
(else (loop (cdr xs) (cons (car xs) zs))))))
(define (min es t r)
(let loop ((es es) (min-e nil) (min-c nil))
(cond ((null? es) min-e)
((or (and (member (cadar es) r) (member (caddar es) r))
(and (member (cadar es) t) (member (caddar es) t)))
(loop (cdr es) min-e min-c))
((or (not min-c) (< (caar es) min-c))
(loop (cdr es) (car es) (caar es)))
(else (loop (cdr es) min-e min-c)))))