Автоаппликация

(defun fact-self (f n)
  (if (= n 0)
      1
      (* n (funcall f f (1- n)))))

(defun ! (n)
  (fact-self #'fact-self n))

Похожие на автоаппликацию формализмы, основанные на ссылках на самих себя (self-reference), легко приводят к логическим парадоксам. Их разрешение предполагает учёт типов объектов и кратности ссылок.

Пример: парадокс Рассела

Программирование с помощью функций высших порядков нельзя назвать простым. Хоть программа и становится короче, обширное применение функционалов затрудняет понимание. Не так-то просто увидеть, сколько аргументов и каких типов передаётся.