lisp - 在 LISP 中使用 'ash' 执行二进制搜索?

标签 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))

现在,基本目标是创建一个数字猜谜游戏,其中用户/玩家选择一个数字,然后计算机尝试猜测这个数字。它执行“二进制搜索”,通过让玩家报告计算机猜测的号码是高于还是低于玩家的号码来查找玩家的号码。

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

ash 函数有什么作用?为什么在*big*-1中加入了*small*的参数?它是如何工作的?它对二分查找有什么作用?

最佳答案

Google 给你 this page这解释了 ash 是算术移位运算。所以 (ash x -1)x 向右移动一位,因此给出它的整数一半。

关于lisp - 在 LISP 中使用 'ash' 执行二进制搜索?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8634799/

相关文章:

lisp - 如何在奈奎斯特中找到声音的均值/平均值

recursion - 在 lambda 函数中递归

macos - 在 CLISP 中更新到 ASDF 3.x

Lisp括号问题

Lisp 代码没有响应

macros - 评估宏体内传递的参数

lisp - (= 1/5 0.2) 是假的?

macros - 为什么这个 Lisp 宏作为一个整体可以工作,即使每个部分都不起作用?

lambda - lisp 中的 lambda 函数是如何工作的?