if-statement - 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在哪里引入这个表格?if
在第 1.1.6 节中进行了介绍,但我在该节中看不到涵盖“if
没有else
”情况的任何地方。我有可能从cond
同一部分的定义中猜出预期的行为,但该部分有一个脚注,表明两者是不同的。那么我怎样才能知道 SICP 打算如何使用这些if
表格呢?
解决方案
在查阅了索引后,我发现有两个地方定义了它:3.3 节的脚注 29和 4.1 节的脚注 10。引用两者:
观察此过程中的 if 表达式没有 <alternative> 表达式。这种“单臂 if 语句”用于决定是否做某事,而不是在两个表达式之间进行选择。如果谓词为假且不存在 < 替代 >,则 if 表达式返回未指定的值。
Scheme中未指定谓词为假且没有替代方案时的if表达式的值;我们在这里选择了 [在 The Metacircular Evaluator 中] 使其为假。我们将通过在全局环境中绑定它们来支持在表达式中使用变量 true 和 false 来评估它们。请参阅第 4.1.4 节。
我承认在咨询 Stack Overflow 之前我应该考虑咨询索引。显然,互联网已经腐烂了我的大脑。但是,我希望这个问题有比我在这里给出的更好的答案。“它是在你需要它之后定义的两章”,即使正确,也不是很愉快。
从好的方面来说,codybartfast 的评论正确地指出你不需要理解练习 1.22 中描述的过程来解决这个问题。事实上,我自己解决了这个问题,很明显我想得太多了。不到五行就可以解决。此外,还有人指出,虽然它的前几个词恰好符合 Scheme 的标准,但上面的第二个引用主要是在谈论第 4 章中正在构建的实现,而不是任何预期使用或在前面的章节中理解。
推荐阅读
- python - 如何在python中打开加密的Url?
- python - 在 Django 中查询用户
- html - CSS Grid如何将项目推到底部然后向左
- python - Raspberry pi 中的 Crontab Selenium Chromium(未知错误:DevToolsActivePort 文件不存在)
- javascript - React Native Picker 在滚动后移回第一个项目并且不选择正确的值
- python - 这个属性装饰器有什么问题(python)
- c# - PHP 和 C# .NET 的正则表达式模式相同,但输出不同
- sql - cout和group by时如何在laravel中选择关系数据
- javascript - 无法解析 com.quickblox:quickblox-android-sdk-messages:3.9.1
- mysql - 如何使用 VB.net 将 byte() 保存到我的 SQLDatabase