Este es un programa de comunicación de 2 procesos en Erlang.

Necesito ejecutar cada proceso en una computadora diferente.

Necesito ejecutar erl -name ping

En computer2, cuyo nombre de host es linux-2.mydomain

Y necesito correr

 erl -name pong

En computer1, cuyo nombre de host es linux-1.mydomain

Entonces

En la computadora 1, ejecuto:

  tut17:start_pong().

En la computadora 2, ejecuto:

 tut17:start_ping(pong@linux-1)

Pero recibí un error:

  • error de excepción: argumento incorrecto en una expresión aritmética en el operador - / 2 llamado como pong @ linux - 1

Parece que Erlang pensó que el "-" es el operador menos en "linux-1".

Entonces, ¿cómo hacer que Erlang entienda mi comando?

Cualquier ayuda es muy apreciada.

El código es el siguiente:

 -module(tut17).

 -export([start_ping/1, start_pong/0,  ping/2, pong/0]).

 ping(0, Pong_Node) ->
     {pong, Pong_Node} ! finished,
     io:format("ping finished~n", []);

 ping(N, Pong_Node) ->
     {pong, Pong_Node} ! {ping, self()},
    receive
        pong ->
             io:format("Ping received pong~n", [])
    end,
 ping(N - 1, Pong_Node).

 pong() ->
     receive
         finished ->
              io:format("Pong finished~n", []);

         {ping, Ping_PID} ->
               io:format("Pong received ping~n", []),

               Ping_PID ! pong,
           pong()
  end.

  start_pong() ->
       register(pong, spawn(tut17, pong, [])).

  start_ping(Pong_Node) ->
       spawn(tut17, ping, [3, Pong_Node]).
1
user1002288 20 abr. 2012 a las 04:37

1 respuesta

La mejor respuesta

Poner el nombre del nodo entre comillas simples:

tut17:start_ping('pong@linux-1')

http://www.erlang.org/doc/reference_manual/data_types.html#id66276

Un átomo debe escribirse entre comillas simples (') si no comienza con una letra minúscula o si contiene otros caracteres que no sean alfanuméricos, guión bajo (_) o @.

4
butter71 20 abr. 2012 a las 10:10