问题标签 [the-little-schemer]

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 投票
0 回答
191 浏览

lisp - multirember 函数中的 max-lisp-eval-depth

在《the little schemer》第四版一书中,第 8 章有函数“multirember & co”,我是在“emacs lisp”语言中做的,导致以下问题: Emacs: nesting beyond `max-lisp-评估深度'

Emacs:嵌套超过 max-lisp-eval-depth'

我的代码有什么问题?

提前致谢

0 投票
1 回答
189 浏览

scheme - The Little Schemer 中原始函数的范围是否不正确?

考虑以下 s 表达式:

在我尝试过的大多数方案实现中,这计算为(b c)因为cdr被传递给 lambda,它命名它car,优先于car.

Little Schemer 提供了第 10 章中用 scheme 编写的 scheme 实现。该实现返回a上述表达式,这对我来说似乎不正确。

很清楚为什么该实现会这样:原始函数的名称被视为*const而不是*identifier here*const不是数字或布尔值的A被渲染为基元,最终硬连线实际的基元

我相信正确的实现是不对原始名称进行特殊检测,而是在值函数中创建一个初始表,其中包含一个将原始名称映射到实际原始实现的条目。

我的问题是:这是 The Little Schemer 实施方案中的错误吗?这种行为是否在方案中得到了很好的说明,还是在 1974 年写这本书时没有很好地说明?

0 投票
1 回答
200 浏览

scheme - 小计划者:`lat?` 没有`cond`?

The Little Schemer(第 4 版)第二章中的第一个问题要求读者编写函数lat?,如果是原子列表,(lat? l)则返回 true 。l

它接着说:

您还没有预料到能够做到这一点,因为您仍然缺少一些成分。

但是我对递归很熟悉,并且atom?书中前面已经介绍过的定义and(进一步暗示存在or),所以我还是试了一下:(repl

在下一页,本书介绍了cond启用以下定义的运算符lat?

这两种实现之间有什么显着区别吗?

0 投票
2 回答
275 浏览

recursion - Little Schemer:为什么将 (mk-length mk-length) 包装成一个函数?

The Little Schemer book的第 9 章中,在为任意长输入构建length函数时,建议如下(在第 170-171 页),在以下代码片段中(来自第 168 页本身):

part (mk-length mk-length), 将永远不会返回,并将无限地应用于自身:

因为我们只是mk-length一次又一次地向自己申请......

但是现在我们已经(mk-length mk-length)从使它length不再返回函数的函数中提取出来了。

现在,为了解决这个问题,本书建议:

mk-length我们最后一个正确版本 of 中 to 自身的应用length变成一个函数。

就像,所以:

我感到困惑的是:

  1. 如果(mk-length mk-length)

    不返回函数

    我们如何将结果应用(mk-length mk-length)到某个东西上,就好像它是一个函数一样?

    /li>
  2. 包装(mk-length mk-length)成函数如何解决“永不返回”(即无限递归)问题?我的理解是,在:

    /li>

x只会被传递给永远不会返回的无限递归函数。

0 投票
2 回答
212 浏览

debugging - [Little Schemer Ch3 pp.34 & 37]:为什么 (rember a (cdr lat)) 作为 cons 的第二个参数在 p.37 示例中解释为未知

我使用 DrRacket 调试模式逐步在 p.34 和 p.37 上运行这两个示例。(cdr lat)以下是第一次处理两个示例时的堆栈窗口结果。

p.34,失败的例子没有cons

调试器中的堆栈区域:

(cdr ...)
(记住...)

p.37cons最后一行:

调试器中的堆栈区域:

(cdr ...)
(rember ...)
(rember ...)

带有 p.37 代码的 Stack 区域表明第二次调用 ofrember已被归类为在处理之前未知(cdr lat)

2 个示例的唯一区别是第 37 页添加了“ cons”。Cons 接受 2 个参数,一个 s 表达式和一个列表。

没有(cdr lat),rember本身不会返回列表。(cdr lat)本书前 40 页中包含的所有示例都具有相同的(function (cdr variable)格式。

我不明白为什么 p.37 示例rember本身被标识为未知并且有理由等待减少,而包含的内容(cdr lat)可以被处理。

或者为什么要以这种方式解释rember第二个论点。cons

谢谢!

0 投票
1 回答
483 浏览

racket - little schemer drracket 错误不能在定义之前引用标识符

初学者问题,刚开始写小策划书,在我的macbook上安装了DrRacket来尝试一些代码示例。

如果我选择球拍语言,下面的代码

将触发错误消息:

如果我选择 R5RS 语言,

我收到一条错误消息:

有谁知道我做错了什么?

谢谢

0 投票
1 回答
49 浏览

racket - 某些函数未加载到 repl

通过 Little Schemer,我们需要定义一些我们自己的函数。我已经定义了它们,加载后只有 add1 和 sub1 出现在 repl 中。我正在使用球拍 v7.0。

我无法弄清楚为什么(原子?)不加载。当我将 s 表达式复制粘贴到 repl 中时,它可以工作。有任何想法吗?

0 投票
3 回答
167 浏览

scheme - 非空方案列表是否包含至少一个原子?

The Little Schemer(第 4 版)中,声称一个错误的列表null?至少包含一个 atom,或者我从阅读文本中了解到。

这对我来说没有意义,因为(atom '())它是错误的,我们可以将它们粘贴到一个列表中以使其非空:

所以我的问题是,这是我的阅读错误,还是定义问题?由于它不在勘误表中,我认为这样一本经过充分研究的书不会有这样的错误。

如果我们认为(())与原子相同(() . ())或什 (cons '() '())至然后考虑cons原子,那么我可以看到您如何到达那里,但我认为这不是正在发生的事情。

(这是在 Racket 7.0 中测试的,atom?书中给出的定义,即

我知道这不包括有趣的球拍功能,但在这里应该足够了。)

0 投票
1 回答
168 浏览

scheme - 为什么 The Little Schemer 的 (car (1 2)) 在 DrRacket 中不起作用?

我一直在读《小谋士》的第一章。问题是,有些例子像 DrRacket 一样工作(eq? "foo" "foo"),有些不喜欢(car ("a" "b"))(cdr ("a" "b"))因为

你能指出我为什么这些例子不起作用吗?

0 投票
1 回答
100 浏览

python - 使用 Hylang 的 Python 中的 RecursionError

首先让我说我知道我在做什么并不理想,但我正在尝试写成员?The Little Schemer使用 Hy的函数。

这完全符合我的预期。问题是,如果列表长度大于 4 个元素,我会收到错误消息

我知道 Python 并不打算进行递归,并且在Python 文档中它甚至说有一个默认的递归限制来防止 C 堆栈溢出。在我的机器上getrecursionlimit()产生 1000 的值,并且我能够成功地将其设置为超过 20,000,然后才出现段错误。即使将其设置为 20,000,我仍然会在 5 个元素的列表中收到错误消息。我不明白的是......我如何在一个 5 元素列表上达到 20,000 多个递归级别?

对于那些好奇的人,我在 15" Macbook pro 上使用 Python 3.6.5、MacOS Mojave 版本 10.14.6、Hylang 版本 0.18.0,而我使用 hy2py 的程序的输出是