Назначение локальной / глобальной переменной LISP

Если мы определим функцию что-то вроде

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

Являетсяx определяется как локальная переменная или глобальная? использование setf / q устанавливает значение как глобальное. если он глобальный, может кто-нибудь сказать мне, как определить локальную переменную в lisp, кроме?let

Спасибо!

Рассмотрим следующий пример

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

когда я даю некоторый вклад вfoo&nbsp;лайк(foo 2)&nbsp;, он возвращает 2, и если мы выполним функцию снова с(foo 1)&nbsp;он по-прежнему возвращает 2 и(foo 3)&nbsp;возвращает 3. Это то, что я действительно хочу сделать. Но вопрос в том, как это возможно, потому что, если я пытаюсь получить доступ к переменнойx&nbsp;Я не могу выйти за пределы функции из терминала clisp. Если я снова получаю доступ к функции, она сохраняет прежнее значение.x

благодарю вас!