简单的问题:Erlang的++
运算符只是lists:concat
的语法糖,还是完全不同的运算?我已经尝试过搜索这个,但谷歌不可能获得“++”并获得任何有用的东西。在寻求帮助时讨厌要求,但是答案的参考将是美妙的。感谢。
-tjw
答案 0 :(得分:8)
X ++ Y
实际上是lists:append(X, Y)
的语法糖。
http://www.erlang.org/doc/man/lists.html#append-2
功能列表:concat / 2是一个不同的野兽。文档描述如下:“连接事物元素的文本表示。事物的元素可以是原子,整数,浮点数或字符串。”
答案 1 :(得分:7)
这是stdlib / lists模块中lists:concat/1
的实现方式:
concat(List) ->
flatmap(fun thing_to_list/1, List).
其中:
flatmap(F, [Hd|Tail]) ->
F(Hd) ++ flatmap(F, Tail);
flatmap(F, []) when is_function(F, 1) -> [].
和
thing_to_list(X) when is_integer(X) -> integer_to_list(X);
thing_to_list(X) when is_float(X) -> float_to_list(X);
thing_to_list(X) when is_atom(X) -> atom_to_list(X);
thing_to_list(X) when is_list(X) -> X. %Assumed to be a string
因此,lists:concat/1
实际上使用了'++'运算符。
答案 2 :(得分:4)
尚未提及++
的一个重要用途:在模式匹配中。例如:
handle_url(URL = "http://" ++ _) ->
http_handler(URL);
handle_url(URL = "ftp://" ++ _) ->
ftp_handler(URL).
答案 3 :(得分:3)
这是一个完全不同的操作。 ++是附加的普通列表。 lists:concat接受一个参数(必须是一个列表),对其元素进行字符串化,并连接字符串。
++:http://www.erlang.org/doc/reference_manual/expressions.html
列出:concat:http://www.erlang.org/doc/man/lists.html
答案 4 :(得分:1)
大多数列表函数实际上使用'++'运算符: 例如list:append / 2:
源代码对其定义如下:
-spec append(List1, List2) -> List3 when
List1 :: [T],
List2 :: [T],
List3 :: [T],
T :: term().
append(L1, L2) -> L1 ++ L2.