Erlang—可以使用Lists:append将元素添加到字符串中吗?
这是我解析加法方程的函数Erlang—可以使用Lists:append将元素添加到字符串中吗?,list,erlang,append,pattern-matching,List,Erlang,Append,Pattern Matching,这是我解析加法方程的函数 expr_print({num,X}) -> X; expr_print({plus,X,Y})-> lists:append("(",expr_print(X),"+",expr_print(Y),")"). 一旦在终端中执行,它应该是这样的(但目前不是这样): 实际上,我们可以这样做,但它不会像X中所希望的那样工作{num,X}是一个数字,而不是数字的字符串表示形式 Erlang中的字符串只是数字列表。如果这些数字在wrig
expr_print({num,X}) -> X;
expr_print({plus,X,Y})->
lists:append("(",expr_print(X),"+",expr_print(Y),")").
一旦在终端中执行,它应该是这样的(但目前不是这样):
实际上,我们可以这样做,但它不会像
X
中所希望的那样工作{num,X}
是一个数字,而不是数字的字符串表示形式
Erlang中的字符串只是数字列表。如果这些数字在wright范围内,它们可以打印为字符串。你应该能够找到详细的解释。因此,您要做的第一件事是确保调用expr\u print({num,3})。
将返回“3”
,而不是3
。你应该能够找到解决办法
第二件事是list:append
,它只接受一个参数list。所以你的代码看起来像这样
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发送,您可能希望使用TCP,这更容易创建(您可以删除append
和flatten
调用),而且速度更快
expra_print({num,X}) ->
lists:flatten(io_lib:format("~p", [X]));
expr_print({plus,X,Y})->
lists:append(["(", expr_print(X),"+",expr_print(Y), ")"]).