问题标签 [land-of-lisp]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
310 浏览

lisp - 为什么 CASE 不能用于字符串值而只能用于符号值?

在《口齿不清的土地》一书中,我读到

因为 case 命令使用 eq 进行比较,所以它通常只用于符号值的分支。除其他外,它不能用于在字符串值上进行分支。

请解释为什么?

0 投票
1 回答
182 浏览

lisp - 在循环中打印到屏幕

我有这个:

它正在工作,只是所有princ调用都在最后一次到达。这里的想法是它们是一个进度指示器,每 1000 次迭代在屏幕上打印一个周期。这是来自 Lisp 书的土地,我想知道是否期望在循环中间打印不是可移植的期望?

0 投票
4 回答
176 浏览

common-lisp - 了解Lisp中的数据模式,为什么这些表达方式不一样?

目前我正在阅读“Lisp 之国”。在最近的一个代码示例中,作者给出了:

证明符号不区分大小写。几页后数据模式正式介绍。

但是我无法真正理解以下内容。eq是一个函数,所以它的名字也是不区分大小写的。因此我应该能够做到这一点:

伟大的。这按预期工作。但是如果我把它放到数据模式的列表中呢?请记住,我只是在尝试一些对我来说是新的东西。

嗯。好的?这是为什么?我原以为如果我将相同的符号放入两个列表中,那么这些列表将被视为相等。

现在的问题是:这是否意味着不比较列表的内容,而是比较列表“对象”本身?我错过了什么?

0 投票
2 回答
338 浏览

if-statement - 与 Lisp 的“if”和“cons”命令混淆

我正在阅读 Conrad Barski 的《Land of Lisp》,我对使用“if”命令(仅举几例)有点困惑。

所以,我知道写 if '() 意味着列表为空且条件为假,如果 '(1) 意味着列表非空且条件为真。

问题是 lisp 如何根据 if(1) 条件的性质(真/假)知道选择和输出哪个表达式?例如,在语句下面的代码中,如果 '(1) 为真,那么 lisp 如何以及为什么选择表达式 I-AM-TRUE 作为输出?

同样,它如何以及为什么在下面的示例中输出 How-does-this-happen..

0 投票
2 回答
285 浏览

lisp - 涉及关联函数的列表的cadr

我在网上环顾四周,找不到我的查询的答案。如果有人能在不降低这篇文章的评分的情况下提供一个好的答案,我将不胜感激。

在 Lisp中carcdr用于数据模式'(whatever here),这对我来说很有意义。

现在,在Lisp Land of Lisp一书中,作者正在解释如何构建文本引擎,突然他使用以下描述来制作函数。

我能问一下他为什么要在列表上做 cadr 吗?为什么它会提供响应而不是错误?它不应该是一种数据模式,即在左括号前有一个引号'(whatever here)吗?

以及为什么他使用 assoc(assoc location nodes)而不是(assoc 'garden *nodes*)

不是第二种正确的使用方法assoc吗?我可能错过了大局,因此非常感谢有人解释这些关键点。

非常感谢!

0 投票
1 回答
98 浏览

graph - 在 CLISP 中提取节点形成点列表(边)

我是 Lisp World 中的“Nil”或 ()。
我想获取边缘列表中所有节点的列表,我编写了一个代码来解决这个问题。但是我遇到了一些意想不到的问题。

(来自“Lisp 之国”的代码 - 第 8 章)

我写了一个代码来提取所有节点作为一个列表,如下所示。

我以为我的代码还不错,但结果显示给我一个尴尬的错误信息。

堆栈溢出?我认为这是由我的代码中的递归函数引起的。我怎样才能正确解决这个问题?

0 投票
2 回答
426 浏览

lisp - LISP:使用 RPLACA/RPLACD/NCONC 反转 LISP 中的列表

所以我试图让一个函数接受一个列表并将其反转,但我不确定我将如何使用RPLACA/ RPLACD/ NONC。基本上与 reverse 做同样的事情,但它使用原始列表的 cons 节点并且不分配任何新的 cons 节点。到目前为止我所拥有的是

0 投票
1 回答
225 浏览

overflow - Wumpus 游戏的 make-city-edges 函数导致堆溢出

通过 Lisp 的土地,我设法进入了 Grand Theft Wumpus 游戏,它让我定义了一个make-city-edges函数。但是,当我尝试运行它时,SBCL 会挂起一段时间,然后给我一个非常讨厌的错误说

我已经检查了三次,看看我是否犯了任何错误,但我找不到任何错误。

这是导致问题的函数:

[这里] 是其余代码,如果您想查看其他功能,我将其添加到 GitHub Gist 页面,因为它会占用太多空间。

我能做些什么来解决这个问题?我正在使用Emacs 24.4 (9.0)OSX 10.9用于SLIMESBCL 1.2.10项目。

0 投票
1 回答
277 浏览

common-lisp - 使用 Land of Lisp 的闭包示例进行记忆化

在Lisp的第 329 页,Conrad Barski使用以下示例代码解释了记忆技术

这个想法很好:当我调用neighbors函数时,我将结果保存到哈希表中,这样下次neighbors使用相同的值调用时pos,我可以查找结果而无需再次计算。

所以我想知道,通过编辑和重新编译它的源代码(在本书的第 314 页给出)neighbors来重命名函数是否更容易。old-neighbors然后记忆示例可以简化为

或者,通过预先previous变成一个全局变量,甚至变成*previous-neighbors*

从而使关闭变得不必要。

所以我的问题是:这样做的原因是什么?

我能想到的原因:

  1. 它具有教学意义,展示了使用闭包(之前已经解释过)可以做什么,并提供了symbol-function.
  2. 即使在您不能或可能不会更改neighbors.
  3. 我错过了一些东西。
0 投票
1 回答
447 浏览

common-lisp - 使用Land of Lisp中的Web服务器代码和OS X上的clisp获取ERR_INVALID_HTTP_RESPONSE

我正在阅读 Lisp 的土地(它已有 10 年历史,但 clisp 也是如此,所以它似乎已经足够最新了)。我在第 13 章,您将在其中编写 Web 服务器。它只是将客户端套接字作为标准输出打开,然后使用princformat t写入客户端。Web 服务器的完整源代码位于http://landoflisp.com/webserver.lisp

我在输入代码和从网站下载 webserver.lisp 并运行它时都遇到了同样的问题。当我在 Chrome 中访问该站点时,我得到 ERR_INVALID_HTTP_RESPONSE。在 Safari 中,我无法打开页面。当我尝试在 Firefox 中访问该站点时,我得到了预期的页面,但所有的 html 标记都只是呈现为文本。当我尝试在 curl 中与站点交互时,我在输出中得到一个结束百分比,我不确定它来自哪里。

我知道这不是最好的 HTML,但如果我添加正文标签并在开始时声明 doctype html,它也会一样。curl 响应中的 % 不在 中princ,当我尝试访问服务器的其他 URL(如 localhost:8080 或 localhost:8080/greeting?name=Lewis)时,我得到一个 %。

我实际上并不打算将这个网络服务器用于任何事情,但本书的其余部分似乎涉及制作一个使用它的应用程序,我想完成这本书,所以如果我能做到就好了至少让网络服务器与至少一个浏览器一起工作。