所以,我现在正在阅读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
?它是如何工作的?它对二进制搜索有什么作用?
> (cons 2 3)
(2 . 3)
Run Code Online (Sandbox Code Playgroud)
Lisp环境只需要分配一个cons单元来连接这两个项目.
以上是来自Lisp的书"Land of Lisp".我不明白为什么这对只位于一个cons单元格中.这些数据的内存是什么样的?
我在Land of Lisp中读到lambda函数是唯一的内置函数.但是我真的不明白这是怎么可能的,因为我认为你至少需要一个加法命令,一个用于比较数字,一个用于将数据从一个变量移动到另一个变量.我想知道是否有人可以向我解释lisp是如何做到的.我不是数学家,所以如果有可能你也可以在没有大量复杂数学的情况下解释它吗?
所以我得到了Land of Lisp并开始做第一个程序.我有几个问题.
有没有办法只编写一些代码并通过编译器或解释器运行它,而不是使用REPL的东西?我不喜欢它.如果我搞砸了,我似乎无法回去.它只是有点说"你搞砸了,重新输入整个功能."
我还想知道REPL的重点是什么.