[例]
不完整的规格
[例] 不完整的规格
一份规格写道:“
if
if
的条件必须是布尔值,两个分支的类型相同。”读起来没什么问题,但它完全没有涉及下面的情况:
- 如果条件恒为真,else 分支永远不会执行,那我们还检查 else 分支吗?
- “类型相同”是字面上一样,还是可以自动转换?
- 检查器拒绝一个程序时,能不能指出它违反的是哪一条?
再如“
f() + g()
f() + g()
先算两边再相加”。如果
f
f
和
g
g
都会打印东西,先打印谁?(也就是说没规定求值顺序)
[附注] 不完整规格中的类型检查问题 按一套明确的类型规则回答前三个问题;求值顺序的影响见 [附注] 求值策略、归约策略与合流性 。