Concurrency Erlang并发编程
编写一个名为calculator的Erlang函数,该函数不带任何参数。该函数在进程中运行时,应等待接收消息。如果消息是四项元组的形式:Concurrency Erlang并发编程,concurrency,erlang,Concurrency,Erlang,编写一个名为calculator的Erlang函数,该函数不带任何参数。该函数在进程中运行时,应等待接收消息。如果消息是四项元组的形式:{Pid,operator,X,Y},请执行以下操作: 如果操作数为“添加”,则向Pid发送一条消息,其中包含添加X和Y的结果 如果操作数是减法运算,则向Pid发送一条消息,其中包含从X减去Y的结果 如果操作数为乘法,则向Pid发送一条消息,其中包含X和Y相乘的结果 如果操作数为除法,则向Pid发送一条消息,其中包含X除以Y的结果 然后,重新运行该函数 如
{Pid,operator,X,Y}
,请执行以下操作:
- 如果操作数为“添加”,则向Pid发送一条消息,其中包含添加X和Y的结果
- 如果操作数是减法运算,则向Pid发送一条消息,其中包含从X减去Y的结果
- 如果操作数为乘法,则向Pid发送一条消息,其中包含X和Y相乘的结果
- 如果操作数为除法,则向Pid发送一条消息,其中包含X除以Y的结果
- 如果消息的形式是包含两个项的元组:{Pid,terminate},则将消息发送到done的Pid。不要重新运行该函数
- 如果消息是任何其他形式,请忽略它并重新运行该函数
calculate() ->
receive
{Pid, Operand, X, Y}
if
Operand == "add" -> Pid ! X+Y
Operand == "substract" -> Pid ! Y - X
Operand == "multiply" -> Pid ! X*Y
Operand == "divide" -> Pid ! X/Y
{Pid, terminate} -> Pid ! "done"
_ -> calculate();
end.
有人能帮我解决这个问题吗?您的代码没有编译,您应该先看看基本的erlang语法 我给你一些线索: 对于您的问题,不应该使用
if
语句,而应该像中一样使用模式匹配
receive
{From,add,X,Y} ->
From ! X+Y,
calculate();
{From,sub,X,Y} ->
...
通常,为此,使用原子(如add
)而不是字符串(如“add”
您应该有一个函数,可以在单独的过程中启动函数calculate/0
:
start() ->
spawn(fun() -> calculate() end).
您应该查看帮助,以更友好的方式编辑和格式化您的问题。