All pastes #1195507 Raw Edit

Unnamed

public text v1 · immutable
#1195507 ·published 2008-09-06 03:49 UTC
rendered paste body
(defun binary-search (target list)
  (let ((length (length list)))
    (binary-search*
     target list 0
     (1- length)
     (truncate (/ length 2)))))

(defun binary-search* (target list low high mid)
  (let ((possible-match (nth mid list)))
    (cond
      ((> low high) nil)
      ((equal possible-match target) mid)
      ((> possible-match target)
       (let ((high mid))
         (binary-search*
          target list low high
          (truncate (/ (+ low high) 2)))))
      ((< possible-match target)
       (let ((low (1+ mid)))
         (binary-search*
          target list low high
          (truncate (/ (+ low high) 2))))))))