Erlang отправить данные в скобках - PullRequest
0 голосов
/ 15 марта 2011

Я внедряю робо-футбольного агента в Эрланге.Я не могу отправить данные типа

(init myteam (версия 14))

или

(удар Power Angle)

на сервер Robocup Soccer simulator, где Power и Angle - это переменные, имеющие некоторое значение [с использованием gen_udp ].Компилятор показывает синтаксическую ошибку.( Скобки являются частью данных ).

Я хочу отправить эти данные на сервер

ok = gen_udp: send (Socket, "localhost", Порт, Данные )

, где Данные должны быть точно такими же, как показано выше 2 примера.

1 Ответ

3 голосов
/ 15 марта 2011

Хм, вы действительно должны показать код для подобных вещей, но:

kick(Power, Angle) ->
  io_lib:format("(kick ~B ~B)", [Power, Angle]).

init() ->
   init(myteam, 14).

init(Team, Version) ->
  io_lib:format("(init ~p (version ~B))", [Team, Version]).

Это способ начать (не проверено). Если вам нужен более быстрый вывод, вам, вероятно, следует написать функцию term_to_sexp, а затем вывести произвольные термины в виде iolist() (ищите iolists, они очень хороши для такого рода работы и ужасно быстрые).

term_to_sexp(A) when is_atom(A) ->
  L = atom_to_list(A),
  <<L>>;
term_to_sexp(B) when is_binary(B) ->
  B;
term_to_sexp(T) when is_tuple(T) ->
  term_to_sexp(tuple_to_list(T));
... % Missing cases probably
term_to_sexp(L) when is_list(L) ->
  intersperse(" ", [term_to_sexp(Item) || Item <- L]).

intersperse(_, []) -> [];
intersperse(_, [X]) -> [X];
intersperse(Sep, [X | Rest]) ->
  [X, Sep | intersperse(Sep, Rest)].

(также не проверено, но начало).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...