Linked list 长生不老药列表模式匹配~使用列表模式匹配获取常量后的x

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][

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][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]