Erlang中的并发

dojqjjoe  于 2022-12-08  发布在  Erlang
关注(0)|答案(2)|浏览(179)

我试图解决的问题如下:
编写一个名为squared的Erlang函数,该函数不带参数。该函数应等待接收消息。消息的格式为{ Pid,N },其中您可以假设Pid是进程ID,N是一个数字。该函数应向进程ID Pid发送一条消息,格式为{ Me,X },其中Me是运行该函数的进程的进程ID,X是N的平方值。然后,该函数应该结束。
到目前为止,我有:

-module(main).
-export([squared/0]).

squared() ->
 receive
    {Pid,N} -> Pid ! {Me, X}, squared();
 terminate -> ok
 end.

我得到的错误如下:
3〉c(主要)。
main.erl:7:变量“Me”未绑定
main.erl:7:变量“X”未绑定
注意:警告:变量'N'未使用错误
我在问题的第二部分也遇到了麻烦,它要求我们以{Me,X}的形式向进程ID发送一条消息。其中Me是进程ID,X是N的平方值。我们将如何做到这一点?

0lvr5msh

0lvr5msh1#

for implement your function you can write a function like bellow

-module(main).
-export([squared/0]).

squared() ->
 receive
    {Pid,N} -> 
        Pid ! {self(), N*N},
        squared();
    terminate -> 
    ok
 end.
lo8azlld

lo8azlld2#

Me应该是接收进程的pid,即self()。N的平方正好是N*N。

-module(main).
-export([squared/0]).

squared() ->
    receive
        {Pid, N} ->
            Pid ! {self(), N*N};
        terminate -> ok
    end.

或者,如果你想更冗长:

squared() ->
    Me = self(),
    receive
        {Pid, N} ->
            X = N * N,
            Pid ! {Me, X};
        terminate -> ok
    end.

相关问题