; nearest pair
(define (nearest-pair xs target)
(let ((pos (list)))
(do ((i 0 (+ i 1)) (ys xs (cdr ys))) ((null? ys))
(set! pos (cons (cons (car ys) i) pos)))
(let loop ((i 0) (xs xs) (np #f) (dist #e1e9))
(if (null? xs) np
(let ((j (assoc (- target (car xs)) pos)))
(cond ((not j) (loop (+ i 1) (cdr xs) np dist))
((= i (cdr j)) (loop (+ i 1) (cdr xs) np dist))
((< (abs (- i (cdr j))) dist)
(loop (+ i 1) (cdr xs) (cons (car xs) (car j)) (abs (- i (cdr j)))))
(else (loop (+ i 1) (cdr xs) np dist))))))))
(display (nearest-pair '(1 5 3 6 4 2) 7)) (newline)
OyBuZWFyZXN0IHBhaXIKCihkZWZpbmUgKG5lYXJlc3QtcGFpciB4cyB0YXJnZXQpCiAgKGxldCAoKHBvcyAobGlzdCkpKQogICAgKGRvICgoaSAwICgrIGkgMSkpICh5cyB4cyAoY2RyIHlzKSkpICgobnVsbD8geXMpKQogICAgICAoc2V0ISBwb3MgKGNvbnMgKGNvbnMgKGNhciB5cykgaSkgcG9zKSkpCiAgICAobGV0IGxvb3AgKChpIDApICh4cyB4cykgKG5wICNmKSAoZGlzdCAjZTFlOSkpCiAgICAgIChpZiAobnVsbD8geHMpIG5wCiAgICAgICAgKGxldCAoKGogKGFzc29jICgtIHRhcmdldCAoY2FyIHhzKSkgcG9zKSkpCiAgICAgICAgICAoY29uZCAoKG5vdCBqKSAobG9vcCAoKyBpIDEpIChjZHIgeHMpIG5wIGRpc3QpKQogICAgICAgICAgICAgICAgKCg9IGkgKGNkciBqKSkgKGxvb3AgKCsgaSAxKSAoY2RyIHhzKSBucCBkaXN0KSkKICAgICAgICAgICAgICAgICgoPCAoYWJzICgtIGkgKGNkciBqKSkpIGRpc3QpCiAgICAgICAgICAgICAgICAgIChsb29wICgrIGkgMSkgKGNkciB4cykgKGNvbnMgKGNhciB4cykgKGNhciBqKSkgKGFicyAoLSBpIChjZHIgaikpKSkpCiAgICAgICAgICAgICAgICAoZWxzZSAobG9vcCAoKyBpIDEpIChjZHIgeHMpIG5wIGRpc3QpKSkpKSkpKQoKKGRpc3BsYXkgKG5lYXJlc3QtcGFpciAnKDEgNSAzIDYgNCAyKSA3KSkgKG5ld2xpbmUp