Atribuição de variável global / local de LISP

Se definirmos uma função algo como

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

Éx definido como uma variável local ou global? Usando setf / q está definindo o valor para ser global. se é global alguém pode me dizer como definir uma variável local em lisp diferentelet?

Obrigado!

Considere o seguinte exemplo

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

quando eu estou dando alguma entrada parafoo gostar(foo 2) , ele está retornando 2 e se nós executarmos a função novamente com(foo 1) ainda retorna 2 e(foo 3) retorna 3.Isso é o que eu realmente quero fazer.Mas a questão é como isso é possível, porque se eu tentar acessar a variávelx fora da função do terminal clisp, eu sou incapaz de. Se eu estou acessando a função novamente, parece manter o valor anterior dex.

obrigado!

questionAnswers(3)

yourAnswerToTheQuestion