erlang中的列表尾模式匹配

erlang中的列表尾模式匹配,erlang,pattern-matching,Erlang,Pattern Matching,假设我有两个列表: First = [1,2,3,4]. Second = [1,2,3,4,234242]. 我知道第二个列表的所有元素都与第一个列表的元素相匹配,但最后一个额外的元素除外。如何使用模式匹配来获取最后一个列表?您可以编写一个函数,只要两个列表中的元素相等,就可以向下递归,然后在第一个列表为空时返回第二个列表中的最后一个元素: find_tail([Head | Tail1], [Head | Tail2]) -> find_tail(Tail1, Tail2);

假设我有两个列表:

First = [1,2,3,4].
Second = [1,2,3,4,234242].

我知道第二个列表的所有元素都与第一个列表的元素相匹配,但最后一个额外的元素除外。如何使用模式匹配来获取最后一个列表?

您可以编写一个函数,只要两个列表中的元素相等,就可以向下递归,然后在第一个列表为空时返回第二个列表中的最后一个元素:

find_tail([Head | Tail1], [Head | Tail2]) ->
    find_tail(Tail1, Tail2);
find_tail([], [Last]) ->
    Last.

仅当第一个列表是文字常量时,才可以使用普通模式匹配:

1> [1,2,3,4] ++ [Last] = [1,2,3,4,234242].
[1,2,3,4,234242]
2> Last.
234242
但如果它是一个变量,则无法执行:

3> X = [1,2,3,4].
[1,2,3,4]
4> X ++ [Last] = [1,2,3,4,234242].
* 1: illegal pattern

您可以编写一个函数,只要两个列表的元素相等,该函数就可以向下递归,然后在第一个列表为空时返回第二个列表的最后一个元素:

find_tail([Head | Tail1], [Head | Tail2]) ->
    find_tail(Tail1, Tail2);
find_tail([], [Last]) ->
    Last.

仅当第一个列表是文字常量时,才可以使用普通模式匹配:

1> [1,2,3,4] ++ [Last] = [1,2,3,4,234242].
[1,2,3,4,234242]
2> Last.
234242
但如果它是一个变量,则无法执行:

3> X = [1,2,3,4].
[1,2,3,4]
4> X ++ [Last] = [1,2,3,4,234242].
* 1: illegal pattern

我想在没有函数调用的情况下完成它。只是通过模式匹配。假设这个额外的项目在我的清单的最前面。然后我可以写:[Iteem | First]=Second.@MehdiPourfar,正如
Robert K
所提到的,除非您枚举了模式中以前的所有元素,否则您无法对列表的最后一个元素进行模式匹配,例如
[[uuu,[uu,[u,[u,[u,]=秒。
我用一个模式匹配示例更新了我的答案-这更有意义吗?我想在不调用函数的情况下完成。只是通过模式匹配。假设这个额外的项目在我的清单的最前面。然后我可以写:[Iteem | First]=Second.@MehdiPourfar,正如
Robert K
所提到的,除非您枚举了模式中以前的所有元素,否则您无法对列表的最后一个元素进行模式匹配,例如
[[uuu,[uu,[u,[u,[u,]=秒。
我用模式匹配示例更新了我的答案-这更有意义吗?鉴于列表的定义方式,我们无法将模式与列表中的最后一个元素进行匹配。鉴于列表的定义方式,我们无法将模式与列表中的最后一个元素进行匹配。