この動作をするErlangの関数はありますか?:
a_function_id_like_to_have("{1,2,{3,4}}") % => {1,2,{3,4}}
( read
Haskellのように)
この動作をするErlangの関数はありますか?:
a_function_id_like_to_have("{1,2,{3,4}}") % => {1,2,{3,4}}
( read
Haskellのように)
このプレゼンテーションのスライド 25 をご覧ください。
erl_eval
、erl_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
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
ドットで終了していることを確認してください。