模式匹配相同的变量

时间:2017-05-16 15:50:26

标签: pattern-matching sml

我对SML中的模式匹配存有疑问。在书#34;编程语言语用学(第二版)"我在SML中读到,当你在函数中使用模式匹配时,同一个变量不能出现多次。解释是模式匹配用于检查函数是否可以在定义的模式中找到,而不是检查变量是否与彼此相关。但它让我困惑:为什么这样的事情无法实现? 这是一个例子:

fun Eq nil = false
| Eq (e) = false
| Eq x::x::resto = true //Error
| Eq x::y::resto = false

这段代码检查列表的前两个元素是否相等。 那么,为什么代码的第三行是错误的?谢谢。

1 个答案:

答案 0 :(得分:2)

模式匹配仅比较编译时常量,否则执行简单的变量赋值。您无法通过模式匹配进行变量比较。您需要删除第三行并将第4行扩展到

Eq x::y::resto = x = y

模式匹配也按顺序发生。由于Eq e实际上匹配所有内容,因此它应该是您的最终条款。