所以,我现在正在阅读 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))
现在,基本目标是创建一个数字猜谜游戏,其中用户/玩家选择一个数字,然后计算机尝试猜测这个数字。它执行“二进制搜索”,通过让玩家报告计算机猜测的号码是高于还是低于玩家的号码来查找玩家的号码。
我对 ash
函数有点困惑。据我了解,这对二进制搜索至关重要,但我不确定为什么。这本书在某种程度上解释了它的作用,但有点令人困惑。
ash
函数有什么作用?为什么在*big*
和-1
中加入了*small*
的参数?它是如何工作的?它对二分查找有什么作用?
最佳答案
Google 给你 this page这解释了 ash
是算术移位运算。所以 (ash x -1)
将 x
向右移动一位,因此给出它的整数一半。
关于lisp - 在 LISP 中使用 'ash' 执行二进制搜索?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8634799/