Vamos a hacer una función transformar o map en lisp que lo que haga es tome una lista y una función y aplique esa función a cada elemento de la lista.
Para esto vamos a analizar los casos si la lista esta vacía, ya esta retornamos la lista vacía. Si no esta vacía, creamos una nueva lista aplicando esa función al primer elemento y llamando de forma recursiva la función transformar para el resto.
Sería así :
(defun transformar (l fx)
(cond
((Null l) Nil)
(T (cons (Funcall fx (first l))
(transformar (rest l) fx)))
)
)
Y la podemos llamar de esta manera :
> (transformar '(1 2 3) (LAMBDA (a) (* a 2)))
(2 4 6)
o
> (transformar '(1 2 3) (LAMBDA (a) (+ a 1)))
(2 3 4)