【发布时间】:2017-06-23 06:53:42
【问题描述】:
类型有什么区别
(seq of nat * seq of nat) -> nat
和
seq of nat * seq of nat -> nat
根据语言参考手册* 的优先级高于->,因此括号无效;它们在语义上是相同的。但是考虑函数定义
length: (seq of nat * seq of nat) -> nat
length (mk_(l,m)) == len l + len m;
length0: seq of nat * seq of nat -> nat
length0 (l,m) == len l + len m;
每个都使用一种类型,并且定义中使用的模式必须不同才能通过类型检查。这两种类型之间似乎存在差异。这里发生了什么?通过括号,它将参数解释为产品,但没有括号有两个参数,但不知何故,函数的参数类型仍然是产品。这是相当混乱的。有人可以澄清一下吗?
【问题讨论】:
标签: vdm-sl