问题标签 [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.
racket - 如何在 DrScheme 中包含文件?
我正在使用 DrScheme 通过 SICP 工作,并且我注意到某些程序(例如,square
)被反复使用。我想把它们放在一个单独的文件中,这样我就可以将它们包含在其他程序中,而不必每次都重写它们,但我似乎无法弄清楚如何做到这一点。
我试过了:
这些都不起作用。显然我正在抓住稻草 - 非常感谢任何帮助。
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 的反例是什么?
math - 我在这个用于计算 PI 的方案程序中找不到我的错误
我正在做一个蒙特卡洛实验来计算 PI 的近似值。来自 SICP:
蒙特卡洛方法包括从一个大集合中随机选择样本实验,然后根据从这些实验结果列表中估计的概率进行推断。例如,我们可以使用 6/pi^2 是随机选择的两个整数没有共同因子的概率来近似;也就是说,它们的最大公约数将是 1。为了获得 的近似值,我们进行了大量的实验。在每个实验中,我们随机选择两个整数并执行测试以查看它们的 GCD 是否为 1。通过测试的次数为我们提供了 6/pi^2 的估计值,由此我们获得了 pi 的近似值.
但是当我运行我的程序时,我会获得像 3.9 这样的值......
这是我的程序:
我的解释器是 MIT/GNU 7.7.90
谢谢你的帮助。
scheme - IronScheme 是否适合通过 SICP 工作?
如果我使用 IronScheme,会不会与 SICP 中的代码不兼容?
scheme - 方案中的报价
以下是 SICP 的练习。我自己无法弄清楚。一些为什么可以帮助我理解?
在解释器中输入以下代码:
它打印出'报价'。为什么?
optimization - SICP做出改变
所以; 我是一个正在尝试通过 SICP 工作的爱好者(它是免费的!),第一章中有一个示例程序,旨在计算用美国硬币找零的可能方法;(change-maker 100) => 292. 它的实现如下:
反正; 这是一个树递归过程,作者“作为一个挑战离开”找到一个迭代过程来解决相同的问题(即固定空间)。在感到沮丧之后,我没有运气弄清楚这一点或找到答案。我想知道这是我的脑放屁,还是作者在和我开玩笑。
scheme - SICP 练习 1.16,我的错误在哪里,因为它看起来对我来说是正确的
我刚开始读这本书是为了好玩。我希望这是家庭作业,但我永远无法负担上麻省理工学院的费用,而且还有很多人比我聪明。:p
fast-exp 应该找到 b^n,即 4^2 = 16, 3^3 = 27
lisp - SICP 1.31:近似 Pi
我自己通过 SICP 工作,所以我没有教练可以询问这个问题。此代码应该近似于 pi,但始终返回零。
以下是此代码中引用的 mod 和产品过程。这些似乎不是问题,但我会包括它们以防万一。
整个事情是公式的实现:
pi / 4 = (2 * 4 * 4 * 6 ...) / (3 * 3 * 5 * 5 ...)
我的错误显然很愚蠢,但我是Scheme的新手,所以我找不到它。如果有人有任何风格提示,我也会非常感激。谢谢!
scheme - MIT Scheme 和 DrScheme 学习 SICP 的优缺点
在尝试通过SICP的情况下(可能同时观看一些/所有 MIT 6.001 视频),使用 MIT Scheme 与使用 DrScheme 的优缺点是什么?
scheme - if 和 cond 的区别?
我现在正在学习 sicp 并执行 ex2.23 我编写了以下代码:
但是运行时,会报错:procedure application: expected procedure, given: #; 论据是:()
我想我知道原因:我递归调用 for-each 函数,每个调用的 for-each 都想返回值
但是当我修改了代码时:
它运行良好。我不明白,为什么?在cond中,是否每个调用的每个都不需要返回值?
我使用 DrScheme,并选择语言SICP
我不是以英语为母语的人,所以如果有没有描述清楚的东西,请告诉我