Erlang ++ оператор.Синтаксический сахар или отдельная операция? - PullRequest
6 голосов
/ 17 марта 2011

Простой вопрос: является ли оператор ++ Эрланга просто синтаксическим сахаром для lists:concat или это вообще другая операция? Я пытался найти это, но Google не может найти "++" и получить что-нибудь полезное. Ненавижу быть требовательным при обращении за помощью, но ссылка с ответом была бы замечательной. Спасибо.

-tjw

Ответы [ 4 ]

8 голосов
/ 18 марта 2011

X ++ Y фактически является синтаксическим сахаром для lists:append(X, Y).

http://www.erlang.org/doc/man/lists.html#append-2

Список функций: concat / 2 - это другой зверь. Документация описывает это следующим образом: «Объединяет текстовое представление элементов вещей. Элементами вещей могут быть атомы, целые числа, числа с плавающей запятой или строки».

7 голосов
/ 17 марта 2011

Вот как lists:concat/1 реализован в модуле stdlib / lists:

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 фактически использует оператор ++.

4 голосов
/ 20 марта 2011

Одно важное использование ++ еще не было упомянуто: при сопоставлении с образцом.Например:

handle_url(URL = "http://" ++ _) -> 
    http_handler(URL);
handle_url(URL = "ftp://" ++ _) ->
    ftp_handler(URL).
3 голосов
/ 17 марта 2011

Это совершенно другая операция.++ - это обычный список добавления.lists: concat принимает один аргумент (который должен быть списком), структурирует его элементы и объединяет строки.

++: http://www.erlang.org/doc/reference_manual/expressions.html

lists: concat: http://www.erlang.org/doc/man/lists.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...