Вопрос про паттерны функционального программирования.
Иногда (не будем вдаваться в подробности, когда; истинная причина — особенности реализации некоторого язычка) надо map делать в виде continuation passing:
(let ((output (map f input)))
(... some code using output ...)
)
переходит в
(cpmap f input (lambda (output) (... some code using output ...)))
Где cpmap мы написали сами, не сильно для этого напрягшись.
Тут всё ок, с точностью до некоторых очевидных деталей.
Дальше. А дальше уже не ок:
Если у нас двумерная структура данных (хотя бы список списков), то можно сделать обычный map от обычного map, и радоваться жизни. А вот как изящно сделать это через continuation passing?.. Неужели никак?..