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!

questionAnswers(3)

yourAnswerToTheQuestion