[英]Elixir, what is this program doing?
我們的老師給了我這個代碼。 我在遵循此代碼的作用時遇到了麻煩。 到目前為止,這就是我所知道的: [x1, y1 | z1] = Output2.abc(3)
[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)
Output2.abc(2)
。 n(z)
作為接收者,以spawn_link / 3開始一個鏈接過程
n(v * v, v)
n(v * v, v)
是對n(x, y)
的調用n(x, y)
因為x和y是不同的值。 n(2*2, 2)
。 n(x,y)
返回與n(x, y+y)
串聯的y
列表,其中x = 4,y = 2 n(4, 2+2)
,調用n(x, x)
返回單個項目列表[4] z
接收,並返回z
( z -> z
) z -> z
就像函數定義: fun(z) {return z}
並且z是從接收函數獲得的參數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.