这是我的函数,它解析一个加法方程。
expr_print({num,X}) -> X;
expr_print({plus,X,Y})->
lists:append("(",expr_print(X),"+",expr_print(Y),")").
一旦在终端中执行,它应该是这样的(但目前不是这样):
>math_erlang: expr_print({plus,{num,5},{num,7}}).
>(5+7)
发布于 2014-09-21 18:26:33
实际上,我们可以这样做,但在X
中,{num, X}
中的工作方式是数字而不是数字的字符串表示。
Erlang中的字符串只是数字列表。如果这些数字在wright范围内,它们可以打印为字符串。您应该能够找到详细的解释这里。因此,您想要做的第一件事就是确保对expr_print({num, 3}).
的调用将返回"3"
而不是3
。您应该能够找到解决方案这里。
第二件事是lists:append
,它只使用一个参数,列表列表。所以你的代码看起来像这样
expra_print({num,X}) ->
lists:flatten(io_lib:format("~p", [X]));
expr_print({plus,X,Y})->
lists:append(["(", expr_print(X),"+",expr_print(Y), ")"]).
这会给你带来一个很好的平面字符串/列表。
另一件事是,您可能不需要单一的列表。如果您打算将此写入文件,或发送TCP,您可能希望使用奥莱斯特,它更容易创建(您可以删除append
和flatten
调用),而且速度更快。
https://stackoverflow.com/questions/25962300
复制相似问题