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