在LISP中使用'ash'来执行二分搜索?

Bha*_*axy 5 lisp common-lisp land-of-lisp

所以,我现在正在阅读Land of Lisp,而且Lisp与我见过的其他编程语言完全不同.

无论如何,本书提供了一些我们打算输入CLISP REPL的代码:

(defparameter *small* 1)
(defparameter *big* 100)

(defun guess-my-number ()
    (ash (+ *small* *big*) -1))

(defun smaller ()
    (setf *big* (1- (guess-my-number)))
    (guess-my-number))

(defun bigger ()
    (setf *small* (1+ (guess-my-number)))
    (guess-my-number))
Run Code Online (Sandbox Code Playgroud)

现在,基本目标是创建一个数字猜谜游戏,其中用户/玩家选择一个数字,然后计算机试图猜测该数字.它通过让玩家报告计算机猜测的数字是高于还是低于玩家的号码来执行"二分搜索",以找到玩家的号码.

我对这个ash功能有点困惑.我的理解是这对二进制搜索至关重要,但我不确定为什么.这本书在某种程度上解释了它的作用,但它有点令人困惑.

这个ash功能有什么作用?为什么它传递了*small*添加的参数*big*-1?它是如何工作的?它对二进制搜索有什么作用?

Bas*_*tch 3

谷歌为您提供了这个页面,它解释了这ash是一个算术移位操作.因此向右(ash x -1)移动x一位,因此给出整数的一半.