Чтобы сделать это в Erlang, вы должны запустить (порождать) процесс, который будет содержать X в памяти, а также PID (идентификатор процесса) процесса, на который он должен отвечать, если вы не хотите каждый раз передавать ему другой PID время вместе с началом / хорошо / закончить. Процессы в Erlang имеют свою собственную память, состояние или loopData. После того, как вы породили процесс, который знает, как обрабатывать определенные сообщения, вы передаете ему сообщения, и он отвечает, отправляя сообщение обратно.
start_test() ->
TestPID = spawn(?MODULE, test, [self()]),
TestPID ! start,
receive
X -> io:format("X is: ~p~n",[X]
end,
TestPID ! ok,
receive
{X,Y} -> io:format("X is: ~p, Y is: ~p~n",[X, Y]
end,
TestPID ! terminate,
receive
Y -> io:format("Y is: ~p~n",[Y]
end.
test(PID) ->
receive
start -> PID ! 4,
test(4, undefined, PID);
terminate -> undefined
end.
test(X, Y, PID) ->
receive
ok -> PID ! {X+5, (X+5)/5},
test(X+5, (X+5)/5, PID);
terminate -> PID ! Y
end.
Не забудьте создать модуль и экспортировать start_test / 0 и test / 1
Если вы запустите start_test (), вы должны получить вывод
X is: 4
X is: 9, Y is: 1.8
Y is: 1.8