【问题标题】:pattern matching with same variable与相同变量匹配的模式
【发布时间】:2017-05-17 00:14:12
【问题描述】:

我对 SML 中的模式匹配有疑问。在“Programming Language Pragmatics(第二版)”一书中,我读到在 SML 中,当您在函数中使用模式匹配时,同一个变量不能出现多次。解释是模式匹配用于检查函数是否可以在定义的模式中找到,而不是检查变量是否相互关联。但这让我很困惑:为什么不能实施这样的事情? 这是一个例子:

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

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

【问题讨论】:

标签: pattern-matching sml


【解决方案1】:

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

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

模式匹配也是按顺序进行的。由于Eq e 实际上匹配所有内容,因此它应该是您的最后一个子句。

【讨论】:

  • 感谢您的回答。而不是 Eq e,它应该是 Eq [e]。
猜你喜欢
  • 2013-04-02
  • 1970-01-01
  • 1970-01-01
  • 2010-11-13
  • 1970-01-01
  • 2013-08-15
  • 2018-09-01
  • 2015-03-04
  • 1970-01-01
相关资源
最近更新 更多