Когда я пытаюсь программировать в функциональном стиле с неизменяемыми объектами, последовательные операции в конечном итоге записывается наизнанку, как это:Последовательные процедуры в Лиспе
(thing-operation3
(thing-operation2
(thing-operation1 thing extra-arg1)
extra-arg2)
extra-arg3)
Я начинаю видеть этот рисунок, повторяющий все над моим кодом, и мне очень трудно его прочитать. Это может незначительно улучшить с помощью процедур более высокого порядка, как карри и составляют:
((compose1
(curryr thing-operation3 extra-arg3)
(curryr thing-operation2 extra-arg2)
(curryr thing-operation1 extra-arg1))
thing)
Лучше, может быть, но это еще написано в обратном порядке, и это занимает некоторое дополнительное когнитивную нагрузку, чтобы выяснить, что происходит. И я не уверен, является ли это идеоматическим Lisp-кодом.
объектно-ориентированный стиль так гораздо легче читать:
thing.operation1(extra-arg1).operation2(extra-arg2)
.operation3(extra-arg3)
Он читает в естественном порядке, и она также может быть реализован с неизменяемыми объектами.
Что такое ideomatic способ записи таких последовательных операций в Lisp, чтобы их было легко читать?
Существует библиотека под названием 'стрелки', которая реализует такие вещи, доступные из Quicklisp. – Svante