Библиотека Common Lisp предоставляет множество функций последовательности , таких как отображение, фильтрация, свертывание, поиск и даже сортировка.Библиотека CL поставляется с Emacs по умолчанию, поэтому вам следует придерживаться ее.Однако мне действительно нравится библиотека dash.el
, потому что она предоставляет огромное количество функций для манипулирования списком и деревом.Он также поддерживает анафорические макросы и поощряет функциональное программирование, которое делает код лаконичным и элегантным.
Сгибы Хаскелла соответствуют dash.el
сгибам:
Сумма диапазона от 1 до 10 с использованием складок может выглядеть следующим образом в Haskell и dash.el
:
foldl (+) 0 [1..10] -- Haskell
(-reduce-from '+ 0 (number-sequence 1 10)) ; Elisp
Вы, наверное, знаете, что сгибы являются очень общими, и можно реализовать карты и фильтры с помощью сгибов.Например, чтобы увеличить каждый элемент на 2, карри и разделы на Haskell позволили бы получить краткий код, но в Elisp вы обычно пишете подробные одноразовые лямбды:
foldr ((:) . (+2)) [] [1..10] -- Haskell
(-reduce-r-from (lambda (x acc) (cons (+ x 2) acc)) '() (number-sequence 1 10)) ; Elisp
Угадайте, что в этом нет необходимостив dash.el
с анафорическими макросами, которые допускают специальный синтаксис, выставляя переменные лямбды в виде ярлыков, таких как it
и acc
в сгибах.Анафорические функции начинаются с 2 тире вместо 1:
(--reduce-r-from (cons (+ it 2) acc) '() (number-sequence 1 10))
В dash.el
:
: 1056 * имеется множество фолдоподобных функций