gpt4 book ai didi

process - 为什么这个 erlang 代码不起作用?

转载 作者:行者123 更新时间:2023-12-02 14:13:34 25 4
gpt4 key购买 nike

fib(N)->
P1 = spawn(fun concFib:conFib/0),
P2 = spawn(fun concFib:conFib/0),
X=rpc(P1,N-2),Y=rpc(P2,N-1),X+Y.

conFib()->
receive
{Client,N} -> Client ! regfib(N)
end.

rpc(Pid,Request)->
case erlang:is_process_alive(Pid) of
true -> begin
Pid ! {self(),Request},
receive
{Pid,Respond} -> Respond
end
end;
false -> io:format("~w process is dead.",[Pid])
end.


regfib(N)->
case N<2 of
true -> 1;
false -> regfib(N,1,1,1)
end.

regfib(N,N,X,_)-> X ;
regfib(N,M,X,Y)-> regfib(N,M+1,X+Y,X).
<小时/>

这个想法是将 fib(N) 过程分为两个过程,一个计算 fib(N-2),另一个进行计算。 fib(N-1)同时为fib(N)=fib(N-1)+fib(N-2)。当我运行前面的代码时,没有任何反应,光标停止在有限循环中或等待未到达结果。
plzzz,我需要帮助,我是一名新的 Erlang 程序员,提前致谢:)

最佳答案

在你的 conFib 中你发送一个整数,但在 rpc 中等待一个元组。应将其更改为:

conFib()->
receive
{Client,N} -> Client ! {self(), regfib(N)}
end.

您可以通过在接收中使用 after 超时来避免这种情况。

关于process - 为什么这个 erlang 代码不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1697959/

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