(defun fact-self (f n) (if (= n 0) 1 (* n (funcall f f (1- n))))) (defun ! (n) (fact-self #'fact-self n))
Похожие на автоаппликацию формализмы, основанные на ссылках на самих себя (self-reference), легко приводят к логическим парадоксам. Их разрешение предполагает учёт типов объектов и кратности ссылок.
Программирование с помощью функций высших порядков нельзя назвать простым. Хоть программа и становится короче, обширное применение функционалов затрудняет понимание. Не так-то просто увидеть, сколько аргументов и каких типов передаётся.