SICP如何使如果表格没有其他其他部分起作用?

问题描述

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章中构建的实现,而不是预期的任何使用或在前面的章节中可以理解。