【问题标题】:Erlang send parenthesized dataErlang 发送带括号的数据
【发布时间】:2011-03-16 14:51:20
【问题描述】:

我正在 Erlang 中实现机器人足球代理。我无法发送像

这样的数据

(init myteam(版本 14))

(踢功角)

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

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

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

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

【问题讨论】:

    标签: erlang


    【解决方案1】:

    嗯,你真的应该显示这样的代码,但是:

    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()'s(查找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)].
    

    (也没有测试,但是一个开始)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-06
      • 2014-08-30
      • 2021-11-30
      • 2016-08-12
      • 2011-08-20
      • 2011-08-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多