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))))))))