;; Recursive binary chop

(defun chop (array n)
  (labels ((looper (low high)
              (let ((halfway (floor (/ (+ low high) 2))))
                (cond ((< (- high low) 2)
                       (if (= (aref array low) n)
                           low
                           -1))
                      ((< n (aref array halfway))
                       (looper low halfway))
                      (t
                       (looper halfway high))))))
    (looper 0 (array-dimension array 0))))