gpt4 book ai didi

functional-programming - 需要帮助理解这个 erlang 代码

转载 作者:行者123 更新时间:2023-12-01 06:59:57 25 4
gpt4 key购买 nike

我无法理解这条线。

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

这是我的理解:
双管“||”之前的任何东西根据双管后的内容重复进行。所以带有删除原子的消息被重复发送到 Pid2。
我知道 '/=' 意味着不平等。我不明白 '<-' 是什么意思,最终整行是什么意思。

最佳答案

[something(X) || X <- L] , 是一个列表理解。 L是一个元素列表,这个表达式创建了一个新元素列表,通过调用 something() 来形成每个元素。
[something(X,Y) || X <-L, Y<-M]类似,但为 X 和 Y 中每个元素的笛卡尔积创建了一个元素。
[something(X) || X <-L, Expr]是一个过滤表达式。与第一个相同,但仅对 L 的元素执行,其中 Expr 对于给定的 X 为真。
[something(X) || {X,..} <-L, Expr]是另一种过滤器。在列表推导式中,仅采用元素可以匹配的那些元素。

要知道的另一件事是,这不仅可以用于生成另一个列表,还可以用于为每个元素执行命令。如果列表理解的结果不匹配,编译器将知道根本不生成列表。此行为可用于模仿 foreach来自其他语言。

一些例子:

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]

因此,您的代码生成来自 PV1a 的所有 {Pid1a, V1a} 元素和来自 P2 的 Pid2 元素的笛卡尔积,除了那些 Pid1a 等于 Pid2 的元素,并且对于这些对中的每一个都向 Pid2 发送 {delete, V1a} 消息。

关于functional-programming - 需要帮助理解这个 erlang 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1570100/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com