问题标签 [sicp]

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 投票
2 回答
2300 浏览

lisp - 是否有使用 Normal-order 评估的 Scheme 解释器?

通过计算机程序的结构和解释中的练习,我一直在慢慢地工作。第1.1.5节讨论了 applicative 与 normal-order 评估,该主题随后在正文中出现了好几次。由于解释器使用应用顺序评估,因此只需在代码中插入调试语句即可轻松display查看其工作原理。能够为正常顺序评估做同样的事情将有助于我的理解。

有谁知道使用正常顺序评估而不是应用顺序实现的 Scheme(或 Lisp)解释器?

更新:

这是一个从 SICP 中给出的示例修改的简短示例。我将定义自己的add过程来打印参数,并使用square书中的过程。

(square (add 1 2))现在,如果我使用应用顺序评估运行短程序,则结果(add 1 2)将只计算一次,然后传递给square过程。操作数12应在最终结果之前打印一次。我们可以在解释器中运行它来验证这就是发生的事情。

但是,使用正常顺序求值时,(add 1 2)应将单个操作数复制到square过程中,该过程将求值为(* (add 1 2) (add 1 2)). 操作数12应在最终结果之前打印两次。

我希望能够在执行正常顺序评估的解释器中运行它,以验证它确实是如何工作的。

0 投票
3 回答
10849 浏览

lisp - SICP 的 Racket 博士问题

我正在通过 SICP 工作。目前,在第一章中,我无法让 Racket 让我重新定义“原始”。例如,我的印象是我应该能够任意做(define + 5),那很好,或者重新定义sqrt程序。相反,我得到了这个:

我目前将语言设置为 R5RS,我的印象是它会处理与 SICP 的兼容性问题。

0 投票
3 回答
5298 浏览

scheme - 方案中的“let”语法问题

我正在阅读“计算机程序的结构和解释”,并且在做其中一个练习(2.1)时遇到了一些麻烦。我正在以 R5RS 模式在 DrRacket 中编码。

这是我的代码:

这是 DrRacket 给我的错误消息:

我想我搞砸了让我们的语法。但我不知道如何解决它。

0 投票
1 回答
3762 浏览

scheme - SICP 累积功能

计算机程序的结构和解释(SICP)部分 2.2.3中定义了几个函数:

两个利用这个的例子对斐波那契数列进行操作,even-fibslist-fib-squares

累积、过滤和映射函数也在第 2.2 节中定义。让我感到困惑的部分是为什么作者将accumulate这里包括在内。accumulate接受3个参数:

  • 要应用的二元函数

  • 一个初始值,用作函数最右边的参数

  • 将应用函数的列表

使用本书中的定义将累积应用于列表的示例:

由于第三个参数是一个列表,所以(accumulate cons nil some-list)只会返回some-list,在这种情况下,结果(filter pred (map op sequence))是一个列表。

accumulate除了与本节中其他类似结构的功能保持一致之外,还有其他原因吗?

0 投票
3 回答
4659 浏览

algorithm - 对米勒拉宾感到困惑

作为我自己的练习,我正在实施 Miller-Rabin 测试。(通过 SICP 工作)。我理解费马的小定理,并且能够成功地实现它。我在 Miller-Rabin 测试中被绊倒的部分是这个“1 mod n”业务。1 mod n(n是一些随机整数)不是总是1吗?所以我对“1 模 n 的非平凡平方根”可能是什么感到困惑,因为在我看来,“1 mod n”在处理整数值时始终为 1。我错过了什么?

0 投票
3 回答
1030 浏览

lisp - 在 SICP 3.2,评估的环境模型中,环境最初是否与其第一个框架相同?

计算机程序的结构和解释第 3.2 部分中,“环境”被定义为“帧序列”。但据我所知,这本书并没有进一步讨论环境和框架之间的区别。另外,我怀疑环境的绘图将它们与框架混为一谈,因为书籍绘图很小且是二维的,并且在没有另一张完整绘图的情况下不容易显示时间演变。

那么将创建时的环境与其第一帧相同是否正确?然后当环境发生任何变化(现有绑定发生变化,创建新绑定)时,环境会在其帧序列中添加一个新帧吗?如果这种理解不正确,那么环境和框架之间究竟有什么区别

提前感谢您的帮助!

0 投票
2 回答
2243 浏览

lisp - SICP、Scheme、DrRacket 问题:定时器/分析器功能?

我目前正在尝试做练习 1.22,它需要一个名为 runtime 的函数,它返回系统运行的毫秒数。但是,我的环境(R5RS)似乎没有这个。它也没有时间、当前毫秒、当前不精确毫秒等。

我可以访问什么功能来分析我的功能?哪些函数返回经过的毫秒数、微秒数等?我当然更喜欢可用的最高精度计时器。

0 投票
1 回答
362 浏览

scheme - Scheme 中是否有相当于 Common Lisp 的 *print-circle* 的东西?

我正在使用 Scheme 中的双端队列(SICP 练习 3.23),我有一个简单的双向链表实现我想测试,但我似乎不知道如何打印出一个循环列表方案(mit-scheme 和 mzscheme/racket)。

在 CL 中有一个标志print-circle用于这种事情,Scheme 中有什么等价的吗?我已经尝试过“with-output-to-truncated-string”,但这似乎在我从 Macports 获得的 mit-scheme 构建中不可用,尽管我认为它应该是?有什么方法可以在 REPL 获得这个程序,我需要包括一些东西吗?

http://sicp.ai.mit.edu/Fall-2003/manuals/scheme-7.5.5/doc/scheme_15.html

谢谢!

0 投票
2 回答
2988 浏览

algorithm - 为什么平均阻尼会神奇地加快定点计算器的收敛速度?

我正在阅读 SICP,作者在计算函数的不动点时刷过平均阻尼技术。我知道在某些情况下它是必要的,即平方根以抑制函数的振荡y = x/y但是,我不明白为什么它会神奇地帮助定点计算函数的收敛。帮助?

编辑

显然,我已经考虑了一些。我似乎无法理解为什么在重复应用时平均一个函数会加速收敛。

0 投票
1 回答
382 浏览

algorithm - 为什么哔哔声不是我的连分数近似正确?

通读更多 SICP,我被困在练习 1.3.8上。我的代码适用于近似 1/phi,但不适用于近似 e - 2。

而不是为 e-2 获得 0.7 blah blah blah,我得到 0.5 blah blah 的东西。我不知道为什么。我很确定我在“eulers-e-2”函数中正确定义了“d”。

编辑:谢谢大家,我是倒过来计算的。这是固定代码。