SICP打算如何在没有替代(else)部分的情况下使用(if)表单



SICP练习1.22包含以下程序:

(define (start-prime-test n start-time)
(if (prime? n)
(report-prime (- (runtime) start-time))))

在我看来,if形式没有其他分支。我只能看到if (test) (consequent)。SICP在哪里介绍这种表格?CCD_ 3在第1.1.6节中介绍;没有CCD_ 5的CCD_;案例。我可能可以从同一节中cond的定义中猜出预期行为,但该节有一个脚注,表明两者不同。那么,我如何才能告诉SICP打算如何使用if表格呢?

在查阅索引后,我发现了定义索引的两个地方:第3.3节的脚注29和第4.1节的脚注10。同时报价:

观察此过程中的if表达式没有<备选方案>表示这样的"单臂if语句"用于决定是否要做某事,而不是在两个表达式之间进行选择。如果谓词为false并且不存在<备选方案>。

Scheme中未指定谓词为false且没有替代项时if表达式的值;我们选择这里[在元循环计算器中]使其为假。我们将支持在要评估的表达式中使用变量true和false,方法是在全局环境中绑定它们。参见第4.1.4节。

我承认,在咨询Stack Overflow之前,我应该考虑一下索引。很明显,互联网已经腐蚀了我的大脑。然而,我希望这个问题有一个比我在这里给出的更好的答案"它是在你需要它之后定义的两章",即使是正确的,也不是很愉快。

从好的方面来看,codybartfast的评论正确地指出,你不需要理解练习1.22中描述的程序就可以解决这个问题。事实上,我自己解决了这个问题,很明显我想得太多了。不到五行就可以解决。此外,也有人指出,尽管它的前几句话恰好符合Scheme的标准,但上面的第二句话主要是关于第4章中正在构建的实施,而不是预期在前几章中使用或理解的任何内容。

相关内容

最新更新