我的老师给了我这段代码。我无法遵循此代码的作用。这是目前为止我所知道的:[x1, y1 | z1] = Output2.abc(3)
被调用,所以函数abc(2)
将产生一个新进程,分配为y
。然后它会将值2发送到y
。当它收到2时,我被困在接收正在做的事情中。 z -> z
是什么意思?Elixir,这个程序在做什么?
此外,教授问什么`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)
将'x1'和'x2'设置在最底部。虽然,我没有看到'x2'或'y2'可能会被设置。递归参考:http://elixir-lang.org/getting-started/recursion.html – BenMorganIO