Asignación de variables locales / globales LISP

Si definimos una función algo como

(defun foo(x)
  (setf x somevalue))

Esx ¿Definido como una variable local o global? usando setf / q está configurando el valor para que sea global. si es global, ¿alguien puede decirme cómo definir una variable local en lisp que no sealet?

¡Gracias!

Considera el siguiente ejemplo

(let ((x 0)) 
  (defun foo (y) 
    (when (equal x 0) (setq x y)) 
    (when (< x y) (setq x y))
    x))

cuando estoy dando alguna entrada afoo me gusta(foo 2) , está devolviendo 2 y si volvemos a ejecutar la función con(foo 1) todavía devuelve 2 y(foo 3) devuelve 3. Esto es lo que realmente quiero que haga. Pero la pregunta es cómo es posible, porque si intento acceder a la variablex fuera de la función desde el terminal de Clisp, no puedo. Si vuelvo a acceder a la función, parece que conserva el valor anterior dex.

¡gracias!

Respuestas a la pregunta(3)

Su respuesta a la pregunta