Przypisanie zmiennej lokalnej / globalnej LISP
Jeśli zdefiniujemy funkcję podobną
(defun foo(x)
(setf x somevalue))
Jestx
zdefiniowany jako zmienna lokalna lub globalna? użycie setf / q ustawia wartość na globalną. jeśli jest globalny, każdy może mi powiedzieć, jak zdefiniować zmienną lokalną w lisp innym niżlet
?
Dzięki!
Rozważmy następujący przykład
(let ((x 0))
(defun foo (y)
(when (equal x 0) (setq x y))
(when (< x y) (setq x y))
x))
kiedy daję trochę informacjifoo
lubić(foo 2)
, powraca 2 i jeśli wykonamy tę funkcję ponownie za pomocą(foo 1)
nadal zwraca 2 i(foo 3)
zwraca 3. To jest to, czego naprawdę chcę. Ale pytanie brzmi, jak to możliwe, ponieważ jeśli spróbuję uzyskać dostęp do zmiennejx
poza funkcją z terminalu clisp nie mogę. Jeśli ponownie korzystam z funkcji, wydaje się, że zachowuje ona poprzednią wartośćx
.
Dziękuję Ci!