Назначение локальной / глобальной переменной 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 лайк(foo 2) , он возвращает 2, и если мы выполним функцию снова с(foo 1) он по-прежнему возвращает 2 и(foo 3) возвращает 3. Это то, что я действительно хочу сделать. Но вопрос в том, как это возможно, потому что, если я пытаюсь получить доступ к переменнойx Я не могу выйти за пределы функции из терминала clisp. Если я снова получаю доступ к функции, она сохраняет прежнее значение.x

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

Ответы на вопрос(3)

Ваш ответ на вопрос