Если вы посмотрите на DEFUN в существующих реализациях, он делает гораздо больше, чем просто определяет функцию.Он, например, записывает местоположение определения для IDE (среды разработки), устанавливает документацию, записывает информацию о типе, ...
Часто Lisp представляет механизм в терминах функционального интерфейса.Типичное использование затем выполняется с помощью набора макросов, которые обеспечивают удобный интерфейс и побочные эффекты в среде разработки.
Иногда в CLOS даже имеется функционально-ориентированная реализация под функциональным интерфейсом.
Изображение выглядит следующим образом
macros <- used by the programmer, convenient to use
^
|
functions <- user interface to the implementation
^
|
CLOS (classes, instances, generic functions) <- low-level extensible machine