Erlang发送带括号的数据

时间:2011-03-15 18:20:29

标签: erlang

我正在Erlang中实施robo足球经纪人。我无法发送像

这样的数据
  

(init myteam(第14版))

  

(踢力角度)

到Robocup足球模拟器服务器,其中Power和Angle是具有某些值的变量[使用 gen_udp ]。编译器显示语法错误。 (括号是数据的一部分

我想要的是将此数据发送到服务器

  

ok = gen_udp:send(Socket,“localhost”,   港口,                         数据

其中数据必须与上面显示的2个示例完全相同。

1 个答案:

答案 0 :(得分:3)

嗯,你应该为这样的东西显示代码,但是:

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)].

(也未经过测试,但是一个开始)。