问题标签 [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 投票
4 回答
4475 浏览

racket - 如何在 DrScheme 中包含文件?

我正在使用 DrScheme 通过 SICP 工作,并且我注意到某些程序(例如,square)被反复使用。我想把它们放在一个单独的文件中,这样我就可以将它们包含在其他程序中,而不必每次都重写它们,但我似乎无法弄清楚如何做到这一点。

我试过了:

这些都不起作用。显然我正在抓住稻草 - 非常感谢任何帮助。

0 投票
2 回答
758 浏览

computer-science - SICP统一算法中看似不必要的情况

我试图理解这里SICP 中描述的统一算法

特别是,在“extend-if-possible”过程中,有一个检查(第一个用星号“*”标记的地方)检查右手“表达式”是否是一个已经绑定到某个变量的变量当前帧:

相关评论指出:

“在第一种情况下,如果我们尝试匹配的变量未绑定,但我们尝试匹配的值本身是一个(不同的)变量,则有必要检查该值是否已绑定,并且“

但是,我想不出实际上有必要这样做的情况。

我认为它在谈论的是您当前可能存在以下框架绑定的地方:

然后被要求“扩展IfPossible”一个从?z 到?y 的绑定。

有了“*”检查,当被要求用“?y”扩展“?z”时,我们看到“?y”已经绑定到4,然后递归地尝试将“?z”和“4”统一起来,这导致我们用“?z = 4”扩展框架。

如果没有检查,我们最终会用“?z = ?y”来扩展框架。但是在这两种情况下,只要 ?z 还没有绑定到其他东西,我就看不到问题所在。

注意,如果 ?z已经绑定到其他东西,那么代码不会到达标记为“*”的部分(我们已经递归到与 ?z 已经匹配的内容统一)。

仔细考虑之后,我意识到生成“最简单”的 MGU(最通用统一器)可能存在某种论据。例如,您可能想要一个具有最少数量的变量引用其他变量的 MGU……也就是说,我们宁愿生成替换 {?x = 4, ?y = 4} 而不是替换 {?x = ?y, ?y = 4}... 但我认为这个算法在任何情况下都不能保证这种行为,因为如果你要求它将 "(?x 4)" 与 "(?y ?y)" 统一起来,那么你会仍然以 {?x = ?y, ?y = 4} 结束。如果无法保证行为,为什么还要增加复杂性?

我的推理在这里都正确吗?如果不是,那么需要“*”检查才能生成正确的MGU 的反例是什么?

0 投票
2 回答
2256 浏览

math - 我在这个用于计算 PI 的方案程序中找不到我的错误

我正在做一个蒙特卡洛实验来计算 PI 的近似值。来自 SICP:

蒙特卡洛方法包括从一个大集合中随机选择样本实验,然后根据从这些实验结果列表中估计的概率进行推断。例如,我们可以使用 6/pi^2 是随机选择的两个整数没有共同因子的概率来近似;也就是说,它们的最大公约数将是 1。为了获得 的近似值,我们进行了大量的实验。在每个实验中,我们随机选择两个整数并执行测试以查看它们的 GCD 是否为 1。通过测试的次数为我们提供了 6/pi^2 的估计值,由此我们获得了 pi 的近似值.

但是当我运行我的程序时,我会获得像 3.9 这样的值......

这是我的程序:

我的解释器是 MIT/GNU 7.7.90

谢谢你的帮助。

0 投票
2 回答
525 浏览

scheme - IronScheme 是否适合通过 SICP 工作?

如果我使用 IronScheme,会不会与 SICP 中的代码不兼容?

0 投票
2 回答
577 浏览

scheme - 方案中的报价

以下是 SICP 的练习。我自己无法弄清楚。一些为什么可以帮助我理解?

在解释器中输入以下代码:

它打印出'报价'。为什么?

0 投票
5 回答
4609 浏览

optimization - SICP做出改变

所以; 我是一个正在尝试通过 SICP 工作的爱好者(它是免费的!),第一章中有一个示例程序,旨在计算用美国硬币找零的可能方法;(change-maker 100) => 292. 它的实现如下:

反正; 这是一个树递归过程,作者“作为一个挑战离开”找到一个迭代过程来解决相同的问题(即固定空间)。在感到沮丧之后,我没有运气弄清楚这一点或找到答案。我想知道这是我的脑放屁,还是作者在和我开玩笑。

0 投票
3 回答
551 浏览

scheme - SICP 练习 1.16,我的错误在哪里,因为它看起来对我来说是正确的

我刚开始读这本书是为了好玩。我希望这是家庭作业,但我永远无法负担上麻省理工学院的费用,而且还有很多人比我聪明。:p

fast-exp 应该找到 b^n,即 4^2 = 16, 3^3 = 27

0 投票
2 回答
511 浏览

lisp - SICP 1.31:近似 Pi

我自己通过 SICP 工作,所以我没有教练可以询问这个问题。此代码应该近似于 pi,但始终返回零。

以下是此代码中引用的 mod 和产品过程。这些似乎不是问题,但我会包括它们以防万一。

整个事情是公式的实现:

pi / 4 = (2 * 4 * 4 * 6 ...) / (3 * 3 * 5 * 5 ...)

我的错误显然很愚蠢,但我是Scheme的新手,所以我找不到它。如果有人有任何风格提示,我也会非常感激。谢谢!

0 投票
3 回答
7592 浏览

scheme - MIT Scheme 和 DrScheme 学习 SICP 的优缺点

在尝试通过SICP的情况下(可能同时观看一些/所有 MIT 6.001 视频),使用 MIT Scheme 与使用 DrScheme 的优缺点是什么?

0 投票
1 回答
6039 浏览

scheme - if 和 cond 的区别?

我现在正在学习 sicp 并执行 ex2.23 我编写了以下代码:

但是运行时,会报错:procedure application: expected procedure, given: #; 论据是:()

我想我知道原因:我递归调用 for-each 函数,每个调用的 for-each 都想返回值

但是当我修改了代码时:

它运行良好。我不明白,为什么?在cond中,是否每个调用的每个都不需要返回值?

我使用 DrScheme,并选择语言SICP

我不是以英语为母语的人,所以如果有没有描述清楚的东西,请告诉我