3

この動作をするErlangの関数はありますか?:

a_function_id_like_to_have("{1,2,{3,4}}") % => {1,2,{3,4}}

( readHaskellのように)

4

2 に答える 2

6

このプレゼンテーションのスライド 25 をご覧ください。

erl_evalerl_parse、およびを使用しerl_scanます。

1> {ok, Tokens, _} = erl_scan:string("{1,2,{3,4}}.").
{ok,[{'{',1},
     {integer,1,1},
     {',',1},
     {integer,1,2},
     {',',1},
     {'{',1},
     {integer,1,3},
     {',',1},
     {integer,1,4},
     {'}',1},
     {'}',1},
     {dot,1}],
    1}
2> {ok, Abstract} = erl_parse:parse_exprs(Tokens).
{ok,[{tuple,1,
            [{integer,1,1},
             {integer,1,2},
             {tuple,1,[{integer,1,3},{integer,1,4}]}]}]}
3> Bindings = erl_eval:new_bindings().
[]
4> {value, Value, _} = erl_eval:exprs(Abstract, Bindings).
{value,{1,2,{3,4}},[]}
5> erlang:display(Value).
{1,2,{3,4}}
true
于 2013-03-16T03:00:53.610 に答える
2

erl_scan:string/1とを簡単に使用できますerl_parse:parse_term/1

string_to_term(Str) ->
    {ok, Tokens, _} = erl_scan:string(Str),
    {ok, Term} = erl_parse:parse_term(Tokens),
    Term.

Strドットで終了していることを確認してください。

于 2014-06-09T16:48:17.187 に答える