我对SML中的模式匹配存有疑问。在书#34;编程语言语用学(第二版)"我在SML中读到,当你在函数中使用模式匹配时,同一个变量不能出现多次。解释是模式匹配用于检查函数是否可以在定义的模式中找到,而不是检查变量是否与彼此相关。但它让我困惑:为什么这样的事情无法实现? 这是一个例子:
fun Eq nil = false
| Eq (e) = false
| Eq x::x::resto = true //Error
| Eq x::y::resto = false
这段代码检查列表的前两个元素是否相等。 那么,为什么代码的第三行是错误的?谢谢。
答案 0 :(得分:2)
模式匹配仅比较编译时常量,否则执行简单的变量赋值。您无法通过模式匹配进行变量比较。您需要删除第三行并将第4行扩展到
Eq x::y::resto = x = y
模式匹配也按顺序发生。由于Eq e
实际上匹配所有内容,因此它应该是您的最终条款。