From Newsgroup: comp.lang.lisp
Tayssir John Gabbour wrote:
Incidentally, instead of -1, you'll want to return NIL upon failure.
Here's a version using LOOP:
(defun binary-search (vector item)
(loop with low = 0
with high = (1- (length vector))
for middle = (truncate (+ low high) 2)
for middle-obj = (aref vector middle)
do (format t "~&{~S, ~S}, ~S" low high middle) ;debugging
while (<= low high)
if (< middle-obj item) do (setf low (1+ middle))
else if (> middle-obj item) do (setf high (1- middle))
else do (return middle)
finally (return nil)))
Gauche Scheme
(use srfi-43) ; vector operations
(define vec #(0 2 4 5 8 9 20 22 23 26 27 30))
(vector-binary-search vec 22 -)
===>
7
--- Synchronet 3.21d-Linux NewsLink 1.2