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), ")"]).