我的老师给了我这个代码。我无法遵循此代码的功能。到目前为止,这就是我所知道的:[x1, y1 | z1] = Output2.abc(3)
被调用,因此函数abc(2)
将生成一个分配为y
的新进程。然后它会将值2发送到y
。当它收到2时,我被困在正在做的事情上。 z -> z
是什么意思?
另外,教授询问`x1,y1是什么。我不明白这些变量在这段代码中的位置。如果有人能够指导我完成这一点,我将不胜感激。感谢
defmodule Output2 do
def abc(x) do
y = spawn_link(__MODULE__, :n, [self()])
send y, x
receive do
z -> z
end
end
def n(z) do
receive do
v -> send z, n(v * v, v)
end
end
defp n(x, x), do: [x]
defp n(x, y), do: [y | n(x, y + y)]
end
[x1, y1 | z1] = Output2.abc(2)
答案 0 :(得分:1)
Output2.abc(2)
被召唤。n(z)
作为接收方,spawn_link/3启动链接过程
n(v * v, v)
的结果
n(v * v, v)
是对n(x, y)
的调用,因为x和y是不同的值。 n(2*2, 2)
。 n(x,y)
会返回与y
连接的n(x, y+y)
列表,其中x = 4,y = 2 n(4, 2+2)
,调用n(x, x)
返回单个项目列表[4] z
,并返回z
(z -> z
)答案 1 :(得分:0)
z -> z
就像函数定义一样:fun(z) {return z}
z 是从接收功能获得的参数。