Example. 不完整的规格

一份规格写道:“ if if 的条件必须是布尔值,两个分支的类型相同.” 这句话读起来没什么问题,却留下几处悬而未决的情形: 条件恒为真、else 分支永远不执行时,是否还要检查 else 分支; “类型相同”指字面上完全一致,还是允许自动转换; 检查器拒绝某个程序时,能否指出它具体违反了哪一条.

再如“ f() + g() f() + g() 先算两边再相加”: 当 f f 和 g g 都会打印字符时,这句话没有规定哪一边先执行、先打印.

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