Functional programming 需要了解此erlang代码的帮助吗

Functional programming 需要了解此erlang代码的帮助吗,functional-programming,erlang,Functional Programming,Erlang,我听不懂这句话 [Pid2 ! {delete, V1a} || {Pid1a, V1a} <- PV1a, Pid2 <- P2, Pid1a /= Pid2 ], [Pid2!{delete,V1a} ||{Pid1a,V1a}我不懂Erlang,但这看起来就像是我熟悉的一堆语言的列表理解。希望这个猜测能帮助你,直到懂Erlang的人能够回答: [Pid2 ! {delete, V1a} || {Pid1a, V1a} <- PV1a, Pid2 <-

我听不懂这句话

[Pid2 ! {delete, V1a}
    || {Pid1a, V1a} <- PV1a, Pid2 <- P2, Pid1a /= Pid2
  ],
[Pid2!{delete,V1a}

||{Pid1a,V1a}我不懂Erlang,但这看起来就像是我熟悉的一堆语言的列表理解。希望这个猜测能帮助你,直到懂Erlang的人能够回答:

[Pid2 ! {delete, V1a} || {Pid1a, V1a} <- PV1a, Pid2 <- P2, Pid1a /= Pid2],

换句话说,对于PV1a和P2中的每个Pid,只要Pid1和Pid2不是相同的Pid,就向Pid2发送消息delete V1a。

[something(X)| | X它是a,您能解释一下解包部分吗?解包是什么意思?这里我们使用模式匹配来首先检查列表PV1a中的一个元素是否是由两个元素组成的元组,并将元组分解为它的元素Pid1a和V1a。模式匹配对于erlang来说是基本的,在erlang代码中无处不在。这会很好将标题更改为“理解Erlang中的列表理解”。
For each item in PV1a, unpacking item to {Pid1a, V1a}
    For each Pid2 in P2
        If Pid1a /= Pid2
            Pid2 ! {delete, V1a} 
1> [ X*2 || X <- [1,2,3] ].
[2,4,6]
2> [ X*Y || X <- [1,2], Y <- [3,4,5] ].
[3,4,5,6,8,10]
3> [ X*3 || X <- [1,2,3,4], X rem 2 == 0 ].
[6,12]
4> [ X || {a,X} <- [{a,1},{a,2},{b,3},{c,4}] ].
[1,2]
Ns = [1,2,3,4,5,6,7,8,9].
[{X,Y,C} || X <- Ns, Y <- Ns, C <- Ns, X*X + Y*Y == C*C].
[{3,4,5},{4,3,5}]
3² + 4² = 5²
9 + 16 = 25
25 = 25