Concurrency Erlang,如何在控制台中打印每个值?
我有一个start()函数,它生成一个进程,并在该进程中多次运行一个方法,这是一个简单的计算器,因此每一行都表示: calculadora:contador({suma,1,1},Server)将结果打印到控制台中(在本例中为1) 问题是,调用start时,它只打印start的最后一行,即: calculadora:contador('exit',Server),它给出了结果(ok,再见) 所以我的问题是如何用这个start函数打印每个结果Concurrency Erlang,如何在控制台中打印每个值?,concurrency,functional-programming,erlang,Concurrency,Functional Programming,Erlang,我有一个start()函数,它生成一个进程,并在该进程中多次运行一个方法,这是一个简单的计算器,因此每一行都表示: calculadora:contador({suma,1,1},Server)将结果打印到控制台中(在本例中为1) 问题是,调用start时,它只打印start的最后一行,即: calculadora:contador('exit',Server),它给出了结果(ok,再见) 所以我的问题是如何用这个start函数打印每个结果 -module(calculadora). -exp
-module(calculadora).
-export([contador/2, loop/0, start/0]).
loop() ->
receive
{Pid, {suma, N1, N2}} ->
Pid ! N1 + N2,
loop();
{Pid, {resta, N1, N2}} ->
Pid ! N1 - N2,
loop();
{Pid, {multiplicacion, N1, N2}} ->
Pid ! N1 * N2,
loop();
{Pid, {division, N1, N2}} ->
Pid ! N1 / N2,
loop();
{Pid, exit} ->
Pid ! {"Bye"};
{Pid, _} ->
Pid ! {error, "wtf"},
loop()
end.
contador(X, Pid) ->
Pid ! {self(), X},
receive
{error, E} ->
{bad, E};
{Cont} ->
{ok, Cont};
R ->
{ok, R}
after 10 ->
{error, timeout}
end.
start() ->
Server = spawn(?MODULE, loop, []),
calculadora:contador({suma, 1, 1}, Server),
calculadora:contador({multiplicacion, 1, 1}, Server),
calculadora:contador({division, 1, 1}, Server),
calculadora:contador({resta, 1, 1}, Server),
calculadora:contador(exit, Server).
像这样使用:
io:format("Result: ~p~n", [calculadora:contador({suma,1,1},Server)]),