(define find-best (lambda (better lst) ; If the list has only one element (if (null? lst) (error "Cannot find the best value in an empty list") (if (null? (cdr lst)) ; That's the best (car lst) ; Otherwise, use the better of the first element and the ; best remaining element. (better (car lst) (find-best better (cdr lst))))))) (define better-value (lambda (compare? val1 val2) (if (compare? val1 val2) val1 val2))) (define longest-string (lambda (lst) (find-best (lambda (str1 str2) (better-value (lambda (str1 str2) (> (string-length str1) (string-length str2))) str1 str2)) lst))) (define constant-5 (lambda (x) 5)) (define constant-6 (lambda (x) 6)) (define constant (lambda (n) ; Given a number (lambda (x) ; Return a procedure n))) ; That returns the number (define compare-to-choose (lambda (comparator?) (lambda (x y) (if (comparator? x y) x y))))