“string_to_term / 1”?(“string_to_term/1”?)

Erlang中是否有这样的功能?

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

(如在哈斯克尔read )

Is there any function in Erlang with this behavior?:

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

(Like read in 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

Take a look at slide 25 of this presentation.

It makes use of erl_eval, erl_parse, and 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“string_to_term / 1”?(“string_to_term/1”?)

Erlang中是否有这样的功能?

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

(如在哈斯克尔read )

Is there any function in Erlang with this behavior?:

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

(Like read in 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

Take a look at slide 25 of this presentation.

It makes use of erl_eval, erl_parse, and 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