为啥我在模式匹配中得到非法模式?

Posted

技术标签:

【中文标题】为啥我在模式匹配中得到非法模式?【英文标题】:Why I am getting illegal pattern on pattern matching?为什么我在模式匹配中得到非法模式? 【发布时间】:2015-12-01 20:32:36 【问题描述】:
1> X = 10.
10
2> Y = 9.
9
3> X - 1 = Y.
* 1: illegal pattern
4> Y = X - 1.
9
5> 10 - 1 = Y.
9

你能解释一下查询3> 中的非法模式是什么吗?谢谢!

【问题讨论】:

【参考方案1】:

您要绑定的变量需要在左侧,而不是右侧。

这是正确的表达方式:

Y = X - 1.

【讨论】:

表达式 5 是正确的,因为它是模式匹配。使用该行,您是在说“我希望 Y(即 9)与 10 - 1(即 9)相匹配”。绑定变量只是模式匹配的一个特例,在表达式 2 中,您说“我希望 9 与 Y(未绑定)匹配”。由于它是未绑定的,它可以匹配任何东西,然后从那时起它被绑定到变量。 “我希望 Y(即 9)与 exp 3 中的 X - 1(即 9)相匹配? 在 5 中,shell 对您有所帮助,因为它可以看到“模式”可以被评估,因此它会执行它,然后检查结果是否为模式。它是10。在 3 中这是不可能的,因为 X-1 不可能被解释为模式,它是一个表达式。你可以说模式是描述数据结构的东西,X-1 没有这样做。 5中对shell的处理有点混乱,可能不应该这样做。

以上是关于为啥我在模式匹配中得到非法模式?的主要内容,如果未能解决你的问题,请参考以下文章

模式匹配中的非法位大小

与 Erlang 中的映射模式匹配时的非法表达式

为啥 OCaml 模式匹配比 Erlang 弱?

Haskell:为啥模式匹配中不允许使用 ++?

为啥 Rust 不在匹配模式中执行隐式取消引用强制?

在 Erlang 中进行模式匹配映射时,为啥这个变量是未绑定的?