4

Erlang lists:filter#

 3 years ago
source link: https://solovyov.net/blog/2007/erlang-filter/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

Erlang lists:filter#

Последние несколько дней понемногу читаю книженцию по ерлангу (давно собирался, но начал вот только-только). Очень рад, что я знаю и пользуюсь Питоном, а не каким-нибудь Перлом или C# - намного легче воспринимается передача функции в функцию, сами высокоуровневые функции - все эти filter, map.

Однако одна штука заставила меня попотеть - в книге lists:filter (кстати, интересно, что в ерланге не надо, как в питоне, очевидно импортировать модули - просто вызываешь, и всё) всегда вызывался вместе с fun (анонимной функцией, та же lambda, только покруче ;). Т.е.

lists:filter(fun(X) -> X rem 2 == 0, lists:seq(1, 10)).

И когда я пытался кинуть туда свою функцию, оно мне говорило invalid expression. :\ Такой вот код никак не работал:

is_even(X) -> X rem 2 == 0.
lists:filter(is_even, lists:seq(1, 10)).

И поиски мануала, как всегда в первый раз, приводили к тому, чему я знаю. :( Когда что-то знаешь - найти легко, а когда не понимаешь сути проблемы - начинается подбор кода к гуглю, чтоб выдал необходимое. :) В конце-концов, разобрался:

lists:filter(fun is_even/1, lists:seq(1, 10)).

Вообще вот эта штука - /1 (arity, как её в ерланге называют, или просто количество параметров) - довольно прикольная вещь. В питоне это всё реализуется опциональными параметрами, а в ерланге - просто разные функции для разного количества параметров (практически перегрузка из ООП). В некоторых случаях это будет давать несколько больше кода, в некоторых - меньше, но в сочетании с pattern matching‘ом это всё пока для меня выглядит феноменально. :)

P.S. Самое смешное, что у меня пока не получается создавать функции в интерпретаторе. Только написав отдельные модули. :(

P.P.S. Немного не хватает фич ipython’а и самодокументируемости.

P.P.P.S. Решение первых двух задач из проекта Эйлера помогает запомнить основные приёмы и синтаксис очень порядочно. :)


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK