[例] 不完整的规格

一份规格写道:“ if if 的条件必须是布尔值,两个分支的类型相同。”读起来没什么问题,但它完全没有涉及下面的情况:

  1. 如果条件恒为真,else 分支永远不会执行,那我们还检查 else 分支吗?
  2. “类型相同”是字面上一样,还是可以自动转换?
  3. 检查器拒绝一个程序时,能不能指出它违反的是哪一条?

再如“ f() + g() f() + g() 先算两边再相加”。如果 f f 和 g g 都会打印东西,先打印谁?(也就是说没规定求值顺序)

[附注] 不完整规格中的类型检查问题 按一套明确的类型规则回答前三个问题;求值顺序的影响见 [附注] 求值策略、归约策略与合流性 。

References

[附注] 不完整规格中的类型检查问题 [answers-to-incomplete-specification-questions]

[附注] 求值策略、归约策略与合流性 [evaluation-strategies-reduction-strategies-and-confluence]

Backlinks

Based on Typsite