[ create a new paste ] login | about

Link: http://codepad.org/qOdxb2Yu    [ raw code | output | fork ]

programmingpraxis - Scheme, pasted on Jan 14:
; 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)


Output:
1
2
3
4
8
0
8
0


Create a new paste based on this one


Comments: