问题描述
Exercise 1.22 of SICP包含以下过程:
(define (start-prime-test n start-time)
(if (prime? n)
(report-prime (- (runtime) start-time))))
在我看来,if
表单没有其他分支。我只能看到if (test) (consequent)
。 SICP在哪里介绍此表格? Section 1.1.6中引入了if
,但是在该节中没有涵盖“ if
而没有else
”情况的地方。我可能可以从同一部分中cond
的定义中猜测预期的行为,但是该部分具有a footnote,表明两者是不同的。那么,如何确定SICP打算如何使用这种if
表格?
解决方法
查阅索引后,我发现了定义索引的两个地方:第3.3节中的Footnote 29和第4.1节中的Footnote 10。同时引用:
观察到此过程中的if表达式不具有
表达式。这样的``单臂if语句''用于决定是否执行某项操作,而不是在两个表达式之间进行选择。如果谓词为false并且没有 ,则if表达式返回未指定的值。
在谓词为false且没有其他选择时的if表达式的值未在Scheme中指定;我们在[Metacircular Evaluator]中选择此处为假。我们将支持在表达式中使用true和false变量,以通过在全局环境中绑定变量来进行评估。请参阅第4.1.4节。
我承认在咨询Stack Overflow之前我应该考虑咨询Index。显然,互联网已经烂透了我的大脑。但是,我希望这个问题的答案比我在此给出的答案更好。 “即使在正确的地方,它也定义了需要的两章。”这不是很愉快。
从好的方面来说,codybartfast的注释正确地指出,您无需了解练习1.22中描述的过程即可解决问题。实际上,我自己解决了这个问题,很明显,我对它的想法太多了。它可以用不到五行来解决。此外,还指出,尽管前几个词恰好符合Scheme的标准,但上面的第二个引号主要是在谈论第4章中构建的实现,而不是预期的任何使用或在前面的章节中可以理解。