; largest forward difference
(define (largest-forward-difference xs)
(let ((lfd 0))
(do ((xs xs (cdr xs))) ((null? xs) lfd)
(do ((ys xs (cdr ys))) ((null? ys))
(set! lfd (max lfd (- (car ys) (car xs))))))))
(display (largest-forward-difference '(1 5 7 2 9))) (newline)
(display (largest-forward-difference '(4 3 2 1))) (newline)
(define (largest-forward-difference xs)
(let loop ((min-to-left (min (car xs) (cadr xs)))
(max-so-far (- (cadr xs) (car xs)))
(xs (cddr xs)))
(if (null? xs) max-so-far
(let* ((min-to-left (min min-to-left (car xs)))
(diff-ending-here (- (car xs) min-to-left)))
(loop min-to-left (max max-so-far diff-ending-here) (cdr xs))))))
(display (largest-forward-difference '(1 5 7 2 9))) (newline)
(display (largest-forward-difference '(4 3 2 1))) (newline)