• Re: binary search

    From B. Pym@Nobody447095@here-nor-there.org to comp.lang.lisp on Mon Jun 30 02:20:56 2025
    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