¿Se prefiere defun o setf para crear definiciones de función en lisp común y por qué?

¿Cuál es la diferencia fundamental en las funciones definidas usandodefun ysetf como a continuación, ¿se prefiere un método sobre otro fuera de las consideraciones de estilo?

Utilizandodefun:

* (defun myfirst (l)
    (car l) )
MYFIRST

* (myfirst '(A B C))

A

Utilizandosetf:

* (setf (fdefinition 'myfirst) #'(lambda (l) (car l)))

#<FUNCTION (LAMBDA (L)) {10021B477B}>
* (myfirst '(A B C))

A

Si, de acuerdo aWikipedia:

Las funciones con nombre se crean almacenando una expresión lambda en un símbolo utilizando la macro defun

Utilizandosetf crear una variable de una manera diferente requiere el uso defuncall:

* (defvar myfirst)

MYFIRST
* (setf myfirst (lambda (l) (car l)))

#<Interpreted Function (LAMBDA (X) (+ X X)) {48035001}>
* (funcall myfirst '(A B C))

A

Según tengo entendido, este tipo de variable es diferente al anterior en que esta variable no se encuentra en el mismo espacio de nombres que el símbolo enlazado defun como se describe en¿Por qué múltiples espacios de nombres?.

Respuestas a la pregunta(1)

Su respuesta a la pregunta