Linked list 长生不老药列表模式匹配~使用列表模式匹配获取常量后的x
Elixir是否以任何方式处理与常量相关的匹配值? 这方面的一个例子是: 所有示例都是该思想的伪语法Linked list 长生不老药列表模式匹配~使用列表模式匹配获取常量后的x,linked-list,erlang,pattern-matching,elixir,Linked List,Erlang,Pattern Matching,Elixir,Elixir是否以任何方式处理与常量相关的匹配值? 这方面的一个例子是: 所有示例都是该思想的伪语法 (后面的值)3=x iex>[|[3 |[x |[x]]]=[1,2,3,4,5,6,7]//x=4 (6之前的值)=x iex>[|[x|[6|]]=[1,2,3,4,5,6,7]//x=5 (介于3和6之间的值的子列表)=x iex>[|[3 |[x |[6 | |]]]=[1,2,3,4,5,6,7]//x=[4,5] (4后面3个值的子列表)=[a、b、c] iex>[[a,b,c][
- (后面的值)3=x
- iex>
[|[3 |[x |[x]]]=[1,2,3,4,5,6,7]//x=4
- (6之前的值)=x
- iex>
[|[x|[6|]]=[1,2,3,4,5,6,7]//x=5
- (介于3和6之间的值的子列表)=x
- iex>
[|[3 |[x |[6 | |]]]=[1,2,3,4,5,6,7]//x=[4,5]
- (4后面3个值的子列表)=[a、b、c]
- iex>
[[a,b,c][a,b,c][1,2,3,4,5,6,7]//x=[5,6,7]
[head | tail]
从头部开始的N个元素,但是随着目标值离第一个元素越来越远,使用[|[|[|[x |]]这样的语法会变得有点愚蠢
获取列表中的第四个元素
是否有任何语法用于匹配列表的相对索引?一个不正确但在概念上合理的语法示例是通过
[|[x |[]]
获取列表中的最后一个索引,或者通过[|[3 |[x |]]获取索引3后的值
Elixir/Erlang不支持对列表中未知位置的项目进行模式匹配,因此您提到的4种情况都不能通过模式匹配完成
唯一可以简化的是列表中第四个元素的位置。而不是:
[_ | [_ | [_ | [x | _]]]]
您可以使用以下模式:
[_, _, _, x | _]
Elixir/Erlang不支持模式匹配列表中未知位置的项,因此您提到的4种情况都不能使用模式匹配 唯一可以简化的是列表中第四个元素的位置。而不是:
[_ | [_ | [_ | [x | _]]]]
您可以使用以下模式:
[_, _, _, x | _]
您正在滥用Elixir中已知的模式匹配。当您对在列表中查找值感兴趣时,没有模式 -(后面的值)3=x -(6之前的值)=x -(介于3和6之间的值的子列表)=x -(4后面3个值的子列表)=[a、b、c]
iex> [1,2,3,4,5,6,7]
...> Enum.drop_while(fn e -> e != 4 end)
...> Enum.slice(1..3)
#⇒ [5,6,7]
.您正在滥用模式匹配,这在Elixir中是众所周知的。当您对在列表中查找值感兴趣时,没有模式 -(后面的值)3=x -(6之前的值)=x -(介于3和6之间的值的子列表)=x -(4后面3个值的子列表)=[a、b、c]
iex> [1,2,3,4,5,6,7]
...> Enum.drop_while(fn e -> e != 4 end)
...> Enum.slice(1..3)
#⇒ [5,6,7]
.请提供示例输入和预期输出,很难理解您试图实现的目标。预期输出是否更清晰?我完全知道此代码无效,但应说明目标。请提供示例输入和预期输出,很难理解您的目标正在尝试实现。预期输出是否更清晰?我完全知道此代码无效,但应说明目标。我不会将其称为滥用模式匹配本身。模式匹配的概念不限于固定位置模式。我不会将其称为滥用模式匹配本身。模式匹配的概念不是静止的固定位置模式。
iex> [1,2,3,4,5,6,7]
...> Enum.drop_while(fn e -> e != 4 end)
...> Enum.slice(1..3)
#⇒ [5,6,7]