我正在Erlang中实施robo足球经纪人。我无法发送像
这样的数据(init myteam(第14版))
或
(踢力角度)
到Robocup足球模拟器服务器,其中Power和Angle是具有某些值的变量[使用 gen_udp ]。编译器显示语法错误。 (括号是数据的一部分)
我想要的是将此数据发送到服务器
ok = gen_udp:send(Socket,“localhost”, 港口, 数据)
其中数据必须与上面显示的2个示例完全相同。
答案 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)].
(也未经过测试,但是一个开始)。