Рекламирую свою новую
библиотеку Generic Sequences [1] для Common Lisp. Она
вводит обобщенные последовательности
похожие на обычные списки Common Lisp, ленивые
последовательности clojure, списки Haskell, а
также похожие на итераторы, которые
можно встретить в таких языках
программирования как C#, F#, Java и Scala. С
помощью комбинаторов легко создавать
обобщенные последовательности, и их
легко итерировать с помощью макроса
ITER.
Более того, есть так
называемое Sequence Comprehension, основанное на
продолжениях из пакета CL-CONT. Это что-то
похожее на синтаксис Sequence Expression из F# и
конструкцию Yield из C#, где мы можем
определить ленивую последовательность
очень простым и декларативным способом.
В то же самое время,
обобщенные последовательности могут
быть очень легко преобразованы в ленивые
потоки, которые широко распространены
в мире функционального программирования.
Помимо этого, такие потоки также
трактуются как обобщенные последовательности.
В дополнение к этому, стандартные списки
и векторы Common Lisp тоже трактуются как
обобщенные последовательности. Еще можно создавать свои последовательности, реализуя протокол из всего двух обобщенных функций.
Есть небольшая
документация [2] в формате PDF.
Весьма любопытно, спасибо!
ОтветитьУдалить