首页 > 解决方案 > Erlang 并发编程

问题描述

编写一个不带参数的名为calculator 的Erlang 函数。该函数在进程中运行时应该等待接收消息。如果消息是四项元组的形式:{ Pid, Operand, X, Y },请执行以下操作:

然后,重新运行该函数。

我的代码:

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.

有人可以帮我解决这个问题吗?

标签: concurrencyerlang

解决方案


您的代码无法编译,您应该先看看基本的 erlang 语法。

我给你一些线索:

您不应该使用该if语句来解决您的问题,而是使用模式匹配,例如

receive
    {From,add,X,Y} ->
        From ! X+Y,
        calculate();
    {From,sub,X,Y} -> 
    ...

通常,为此目的,使用 atom likeadd而不是 string like"add"

您应该有一个功能可以calculate/0在单独的进程中启动该功能:

start() ->
    spawn(fun() -> calculate() end).

推荐阅读