Стройте детерминированные pipeline из обхода коллекций слева направо и явно задавайте арность callback и контексты результатов.
Кратко
LISPEX
(reduce + 0 (map (lambda (x) (* x x)) (filter odd? (list 1 2 3 4))))Результат
OUTPUT
10Рабочий порядок
- Используйте
mapдля одного результата на элемент,filterдля выбора и folds для одного аккумулятора. - Callbacks выполняются как гостевые процедуры, поэтому действуют ошибки, escapes, предупреждения и value contexts.
- Используйте
apply, когда последний правильный список должен стать позиционными аргументами; хвостовое применение сохраняется.
Границы
- Callback, дающий ноль или несколько значений в позиции одного значения, вызывает E320.