erlang - 模式匹配的基本问题

标签 erlang pattern-matching

我注意到 [H|T] = [1].成功但 [H|T] = [].失败。我想这就是它的工作原理,但是设计师是否有任何理由不选择让这种模式匹配成功并导致分配 H=[]T=[] ?

9> [H|T] = [1].
[1]
10> H.
1
11> T.
[]
12> [H|T] = [].
** exception error: no match of right hand side value []

最佳答案

[H|T]会匹配 []H=T=[] ,然后 [[]]不会与 [] 区分开来使用模式匹配。

进一步的模式 [][H|T]将不再相互排斥,所以如果你不小心匹配到 [H|T]首先在递归函数中,其中 []是基本情况,你会导致无限递归。

还使用 []作为“这个列表没有头”的符号似乎很随意,可能会让很多用户感到惊讶。

关于erlang - 模式匹配的基本问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5065193/

相关文章:

scala - "case"在 Scala 的部分函数中究竟是如何工作的?

Scala模式匹配: Are parametrized extractor objects possible?

erlang - 尾递归 pow Erlang

encryption - Erlang Crypto 新 API crypto_one_time/5 不接受选项 : [{encrypt, true}]

Javascript - 删除 Json 对象中的特殊字符和关联字符串

regex - 我怎样才能找到匹配特定次数的模式?

linux - 为什么linux有足够的内存但是使用了swap

erlang - 如何为 Erlang/OTP 构建和组织测试?

java - 如何从java中生成的模式中获取原始代码?