Назначение локальной / глобальной переменной 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
благодарю вас!