问题标签 [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.
lisp - multirember 函数中的 max-lisp-eval-depth
在《the little schemer》第四版一书中,第 8 章有函数“multirember & co”,我是在“emacs lisp”语言中做的,导致以下问题: Emacs: nesting beyond `max-lisp-评估深度'
Emacs:嵌套超过 max-lisp-eval-depth'
我的代码有什么问题?
提前致谢
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 年写这本书时没有很好地说明?
scheme - 小计划者:`lat?` 没有`cond`?
The Little Schemer(第 4 版)第二章中的第一个问题要求读者编写函数lat?
,如果是原子列表,(lat? l)
则返回 true 。l
它接着说:
您还没有预料到能够做到这一点,因为您仍然缺少一些成分。
但是我对递归很熟悉,并且atom?
书中前面已经介绍过的定义and
(进一步暗示存在or
),所以我还是试了一下:(repl)
在下一页,本书介绍了cond
启用以下定义的运算符lat?
:
这两种实现之间有什么显着区别吗?
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
变成一个函数。
就像,所以:
我感到困惑的是:
如果
(mk-length mk-length)
不返回函数
我们如何将结果应用
/li>(mk-length mk-length)
到某个东西上,就好像它是一个函数一样?包装
/li>(mk-length mk-length)
成函数如何解决“永不返回”(即无限递归)问题?我的理解是,在:
x
只会被传递给永远不会返回的无限递归函数。
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
谢谢!
racket - little schemer drracket 错误不能在定义之前引用标识符
初学者问题,刚开始写小策划书,在我的macbook上安装了DrRacket来尝试一些代码示例。
如果我选择球拍语言,下面的代码
将触发错误消息:
如果我选择 R5RS 语言,
我收到一条错误消息:
有谁知道我做错了什么?
谢谢
racket - 某些函数未加载到 repl
通过 Little Schemer,我们需要定义一些我们自己的函数。我已经定义了它们,加载后只有 add1 和 sub1 出现在 repl 中。我正在使用球拍 v7.0。
我无法弄清楚为什么(原子?)不加载。当我将 s 表达式复制粘贴到 repl 中时,它可以工作。有任何想法吗?
scheme - 非空方案列表是否包含至少一个原子?
在The Little Schemer(第 4 版)中,声称一个错误的列表null?
至少包含一个 atom,或者我从阅读文本中了解到。
这对我来说没有意义,因为(atom '())
它是错误的,我们可以将它们粘贴到一个列表中以使其非空:
所以我的问题是,这是我的阅读错误,还是定义问题?由于它不在勘误表中,我认为这样一本经过充分研究的书不会有这样的错误。
如果我们认为(())
与原子相同(() . ())
或什 (cons '() '())
至然后考虑cons
原子,那么我可以看到您如何到达那里,但我认为这不是正在发生的事情。
(这是在 Racket 7.0 中测试的,atom?
书中给出的定义,即
我知道这不包括有趣的球拍功能,但在这里应该足够了。)
scheme - 为什么 The Little Schemer 的 (car (1 2)) 在 DrRacket 中不起作用?
我一直在读《小谋士》的第一章。问题是,有些例子像 DrRacket 一样工作(eq? "foo" "foo")
,有些不喜欢(car ("a" "b"))
或(cdr ("a" "b"))
因为
你能指出我为什么这些例子不起作用吗?
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 的程序的输出是