2分検索

マシン起動後一回しかでないバグのテストは疲れる。
コンパイルしてテストして再起動して・・・。
再起動してて暇な間に練習。

(defun oserch(bt a)
  (oserch_ bt a 0 (length bt)))

(defun oserch_(bt a low high)
  (if (> low high)
      nil
    (let* ((i (truncate (+ low (/ (- high low) 2))))
       (target (nth i bt)))
      (cond ((equal a target)
         target)
        ((> target a)
         (oserch_ bt a low (1- i)))
        *1
        (T 
         nil)))))