Erlang, синтаксис понимания списка - PullRequest
9 голосов
/ 11 февраля 2009

Я видел этот код в Erlang:

[X-$0 || X<-someFun()]

В этой строке я нашел синтаксис -$0 очень полезным.

Я прочитал код и оценил его значение, но я не совсем уверен: он разделил все числа?

Я бы хотел увидеть объяснение или справочную страницу этого синтаксиса, но не могу его найти. Может кто-нибудь показать мне правильную страницу?

Ответы [ 2 ]

17 голосов
/ 11 февраля 2009

То, что делает этот код, берет вывод из someFun() (который должен вернуть список), и для каждого элемента в списке он присваивает значение элемента переменной X, а затем вычитает значение ASCII символа 0 от этого значения. Результирующий список является значением всего этого выражения.

На практике (и я сам написал этот код десятки раз), предполагается, что someFun/0 - это функция, которая возвращает строку, содержащую только цифры, и затем преобразует эту строку в список. из цифр. Таким образом, если someFun() вернул "12345", результатом этого понимания списка будет [1, 2, 3, 4, 5].

Если вы знакомы с концепцией map функции (как в MapReduce), то это должно звучать довольно знакомо.

Эта страница викибук выглядит как хорошее введение в понимание списка Эрланга:

http://en.wikibooks.org/wiki/Erlang_Programming/List_Comprehensions

Книга Джо Армстронга "Программирование на Эрланге" с Прагматической книжной полки (http://pragprog.com/titles/jaerlang/programming-erlang) также очень хорошо охватывает понимание списка (наряду со всем остальным, связанным с Эрлангом). Отличная книга, настоятельно рекомендуется и т. Д.

1 голос
/ 11 февраля 2009

Обычная страница документации для понимания списка находится в Справочном руководстве Erlang Раздел 6.22 и в Примеры программирования Раздел 3.

Оба они находятся на главной странице документации (нажмите на папку программирования Erlang в левой строке меню).

Документация по Erlang потрясающая, просто ее макет немного изящный ...

...