gpt4 book ai didi

erlang - 在Erlang中,使用递归时如何返回字符串?

转载 作者:行者123 更新时间:2023-12-02 21:57:55 26 4
gpt4 key购买 nike

我真的无法更好地表达这个问题,但这是我的问题:我想使用this在 Erlang 中将中缀表达式转换为后缀表达式的代码,但它只写入控制台输出。问题是,我需要返回一个列表或字符串,这样我就可以将它用作其他函数中的参数。

-module(foo).
-compile(export_all).

parse(Str) ->
{ok, Tokens, _} = erl_scan:string(Str ++ "."),
{ok, [E]} = erl_parse:parse_exprs(Tokens),
E.

rpn({op, _, What, LS, RS}) ->
rpn(LS),
rpn(RS),
io:format(" ~s ", [atom_to_list(What)]);
rpn({integer, _, N}) ->
io:format(" ~B ", [N]).

p(Str) ->
Tree = parse(Str),
rpn(Tree),
io:format("~n").

例如,我想要这样的东西:

Str = "2 * (3 + 4)".
module:p(Str) =:= "2 3 4 + *".
module:anotherFunction(p(Str)).

最佳答案

最后您只需要使用 io_lib:format/2 而不是 io:format/2lists:flatten/1 即可。

-module(foo).
-compile(export_all).

parse(Str) ->
{ok, Tokens, _} = erl_scan:string(Str ++ "."),
{ok, [E]} = erl_parse:parse_exprs(Tokens),
E.

rpn({op, _, What, LS, RS}) ->
io_lib:format("~s ~s ~s", [rpn(LS), rpn(RS), atom_to_list(What)]);
rpn({integer, _, N}) ->
io_lib:format("~b", [N]).

p(Str) ->
Tree = parse(Str),
lists:flatten(rpn(Tree)).

关于erlang - 在Erlang中,使用递归时如何返回字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17438727/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com