((lambda (x) `(,x ',x)) '(lambda (x) `(,x ',x)))
((lambda (x a b c d) `(,x ',x ,a ,b ,c ,d))
'(lambda (x a b c d) `(,x ',x ,a ,b ,c ,d)) 1 2 3 4)
(defun chop1 (array n)
(let ((low 0)
(high (array-dimension array 0)))
((lambda (x array n low high)
(if (< (- high low) 2)
(if (= (aref array low) n)
low
-1)
`(,x ',x ,array ,n ,low ,high)))
'(lambda (x array n low high)
(if (< (- high low) 2)
(if (= (aref array low) n)
low
-1)
`(,x ',x ,array ,n ,low ,high))) array n low high)))
(defun chop2 (array n)
(let ((low 0)
(high (array-dimension array 0)))
((lambda (x array n low high)
(let ((halfway (floor (/ (+ low high) 2))))
(if (< n (aref array halfway))
(setf high halfway)
(setf low halfway)))
(if (< (- high low) 2)
(if (= (aref array low) n)
low
-1)
`(,x ',x ,array ,n ,low ,high)))
'(lambda (x array n low high)
(let ((halfway (floor (/ (+ low high) 2))))
(if (< n (aref array halfway))
(setf high halfway)
(setf low halfway)))
(if (< (- high low) 2)
(if (= (aref array low) n)
low
-1)
`(,x ',x ,array ,n ,low ,high))) array n low high)))
(defun chop3 (array n)
(let* ((low 0)
(high (array-dimension array 0))
(result ((lambda (x array n low high)
(let ((halfway (floor (/ (+ low high) 2))))
(if (< n (aref array halfway))
(setf high halfway)
(setf low halfway)))
(if (< (- high low) 2)
(if (= (aref array low) n)
low
-1)
`(,x ',x ,array ,n ,low ,high)))
'(lambda (x array n low high)
(let ((halfway (floor (/ (+ low high) 2))))
(if (< n (aref array halfway))
(setf high halfway)
(setf low halfway)))
(if (< (- high low) 2)
(if (= (aref array low) n)
low
-1)
`(,x ',x ,array ,n ,low ,high))) array n low high)))
(loop while (not (numberp result)) do
(setf result (eval result)))
result))