Erlang 并发编程
Posted
技术标签:
【中文标题】Erlang 并发编程【英文标题】:Erlang concurrent programming 【发布时间】:2021-05-26 10:03:59 【问题描述】:编写一个不带参数的名为calculator 的Erlang 函数。该函数在进程中运行时应该等待接收消息。如果消息是四项元组的形式: Pid, Operand, X, Y
,请执行以下操作:
然后,重新运行该函数。
如果消息是一个元组的形式,有两个项目: Pid, terminate ,然后向完成的 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.
有人可以帮我解决这个问题吗?
【问题讨论】:
您应该查看帮助以更友好的方式编辑和格式化您的问题。 【参考方案1】:您的代码无法编译,您应该先看看基本的 erlang 语法。
我给你一些线索:
您不应该使用if
语句来解决您的问题,而是使用模式匹配代替
receive
From,add,X,Y ->
From ! X+Y,
calculate();
From,sub,X,Y ->
...
通常,为此,请使用 add
之类的原子,而不是 "add"
之类的字符串
你应该有一个函数来在一个单独的进程中启动函数calculate/0
:
start() ->
spawn(fun() -> calculate() end).
【讨论】:
以上是关于Erlang 并发编程的主要内容,如果未能解决你的问题,请参考以下文章
如何等待用户的输入并继续进行erlang并发编程中的进一步代码?