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

sicp - SICP 练习 1.19

这是生成斐波那契数的过程,这里是参考:http ://sicp.org.ua/sicp/Exercise1-19

据说我们可以将程序视为“a <- bq + aq + ap and b <- bp + aq”。我的问题是作者(或其他人)如何想到这个好主意?必须是这种形式?

0 投票
1 回答
5079 浏览

clojure - Clojure-为什么这段代码在 clojure 中不起作用,我是否缺少一些惰性评估陷阱?

我是 clojure 的新手,并通过 SICP 学习它。

我无法让 SCIP 1.3.1 中的这段代码工作。

我错过了什么?

这是错误消息:

0 投票
4 回答
7107 浏览

lisp - Scheme 中是否有与 Lisp 的“运行时”原语等价的东西?

根据SICP 第 1.2.6 节,练习 1.22:

大多数 Lisp 实现都包含一个称为 runtime 的原语,它返回一个整数,该整数指定系统运行的时间量(例如,以微秒为单位)。

我正在使用DrScheme,其中运行时似乎不可用,所以我正在寻找一个好的替代品。我在 PLT-Scheme Reference 中发现有一个current-milliseconds原语。有谁知道Scheme中是否有分辨率更好的计时器?

0 投票
6 回答
8810 浏览

recursion - 不知道如何解决 SICP 练习 1.11

练习 1.11

函数ff(n) = nifn < 3f(n) = f(n - 1) + 2f(n - 2) + 3f(n - 3)if的规则定义n > 3。编写一个f通过递归过程进行计算的过程。编写一个f通过迭代过程进行计算的过程。

递归实现它很简单。但我不知道如何迭代地做到这一点。我尝试与给出的斐波那契示例进行比较,但我不知道如何将其用作类比。所以我放弃了(对我感到羞耻)并用谷歌搜索了一个解释,我发现了这个:

阅读后,我理解了代码及其工作原理。但是我不明白的是从函数的递归定义到这个需要的过程。我不明白代码是如何在某人的脑海中形成的。

你能解释一下解决问题所需的思考过程吗?

0 投票
2 回答
511 浏览

common-lisp - 使用 change-class 从数字创建多项式对象

我已经按照 SICP 2.5.3 中描述的方式编写了一个多项式类(使用 defclass 除外)。我希望能够无缝地添加和乘以多项式和常规数字,但我不能让 change-class 接受一个数字。

我试图通过将类从整数更改为浮点数来简化问题:

但这给了我错误:

我从(fyi)收到相同形式的错误:

我将继续执行手动转换,但我更喜欢使用内置的 clos 工具。

正如 Xach 指出的那样,我可以使用强制或浮点数将 4 更改为浮点数。这旨在作为我尝试做的一个更简单的示例,并消除我的 update-instance-for-different-class 错误的任何可能性。

这是我尝试过但不起作用的较长版本:

我仍然收到类似上面示例的错误:

0 投票
1 回答
173 浏览

scheme - 方案程序问题

我定义了 Scheme 过程以返回另一个带有 2 个参数的过程:

如果我使用带有 2 个参数 10 和 0.0001 的 sin 程序运行此程序,那么就可以了

如果我递归地运行这个过程,那么它有错误

那么谁能告诉我我的问题在哪里?先感谢您 !!!

PS:这是SICP练习1.44的一部分

0 投票
3 回答
1185 浏览

scheme - Scheme中循环定义的问题

我目前正在通过 SICP 使用 Guile 作为练习的主要语言。在执行第 3.5 章的练习时,我发现了一个奇怪的行为。我已经在各种平台上使用 Guile 1.4、Guile 1.8.6 和 Guile 1.8.7 重现了这种行为,并且确信它不是特定于我的设置。

此代码工作正常(并计算 e):

以下代码给出相同的结果:

但它会产生错误消息:

因此,当嵌入到过程定义中时, (define y ...) 不起作用,而在 REPL 的全局环境中的过程之外它可以正常工作。

我在这里做错了什么?如有必要,我也可以发布辅助代码(即积分、流图等的定义)。除了 cons-stream 的系统相关代码之外,它们都在书中。我自己对 Guile 的 cons-stream 实现如下:

0 投票
4 回答
6238 浏览

lambda - 使用 lambda 而不是 let in 方案

在 SICP 1.2.1 中有一个生成有理数的函数,如下所示:

我只是好奇如何使用 lambda 而不是 let 来实现相同的功能,而无需两次调用 GCD。我自己想不通。

0 投票
6 回答
1097 浏览

scheme - 在使用 DrScheme 的 SICP 练习 2.26 中,为什么 cons 返回一个列表,而不是一对列表?

在 SICP 练习 2.26 中,给出了此方案代码:

然后给出这个 cons 调用:

我预计会产生一对列表,((1 2 3) (4 5 6))但解释器给出了 ((1 2 3) 4 5 6) ……一个包含 4 个元素的列表,第一个是一个列表。为什么 y 被区别对待?我尝试查找其他 SICP 答案以获得解释,但找不到令人满意的答案。那么任何Scheme / Lisp专家能否对这方面的缺点有所了解?提前感谢您的任何见解。

0 投票
1 回答
1952 浏览

lisp - “计算机程序的结构和解释”的封面到底在写什么?

《计算机程序的结构和解释》封面到底是关于什么的?我的意思是我知道“eval”、“apply”和“λ”都是什么意思,但我很难理解图片的其余部分。

娘娘到底是谁?她为巫师工作吗?她为什么指着桌子?她是指着那个小碗状的东西吗?还是书?还是一般的桌子?她是在试图告诉巫师他应该对桌子或桌子上的物品应用某种 Lisp 魔法吗?还是她只是在告诉他一些平淡无奇的事情,比如他的食物变冷了?

那张桌子上看起来像……一条腿……末端有一只脚的那条腿到底是什么鬼(因为腿往往有)?桌子如何在一条腿上保持平衡?(或者那是阴影中的另一条腿?)

[注意:如果您想知道,我正在等待一个漫长的构建完成。]