Реализация функциональных коллекций, как в java-stream, scala-collections. Например: collection.map(modifier).filter(...).reduce(...).

Чтобы было lazy и оптимально: два последовательных фильтра схлапываются в один.

Проходные: mapfilterflatMapziptake. Терминальные: reducefoldforEach.

Литература

  1. MIT 6.005 - Map Filter Reduce это конспект лекций из курса Массачусетского университета на тему функциоанльных комбинаторов.
  2. Cornell University CS31100 - Map and Fold это конспект лекции из курса университета Корнелл про map, filter, fold на языке hascell.
  3. Wiki: Ленивые вычисления
  4. Java streams API - документация API ленивых коллекций в java. Есть объяснение типов операций - intermediate и terminal.
  5. Scala collections API - документация про устройство старых коллекций в scala. Они не lazy, но видов операций там очень много.

Как должно работать

from func_collections import Seq

s = Seq(1,2,3,4) \\
    .filter(lambda x: x % 2 == 0) \\
    .map(lambda x: x ** 2) \\
    .reduce(lambda acc, cur: acc+cur)

assert(s == 2**2 + 4**2)

Базовый набор функций

Map

Функция трансофрмации, применяемая над каждым элементом последовательнсти.

Filter

Функция фильтрации, то есть отсеивает элементы, если они не удовлетворяют условию предиката.

Fold

Функция свёртки последовательности в некоторое одно значение.

Foreach

Функция обхода всего списка.