LISP - zmienne

W LISP każda zmienna jest reprezentowana przez symbol. Nazwa zmiennej jest nazwą symbolu i jest przechowywana w komórce pamięci symbolu.

Zmienne globalne

Zmienne globalne mają stałe wartości w całym systemie LISP i pozostają w mocy do momentu określenia nowej wartości.

Zmienne globalne są zwykle deklarowane przy użyciu rozszerzenia defvar zbudować.

Na przykład

(defvar x 234)
(write x)

Kiedy klikniesz przycisk Wykonaj lub naciśniesz Ctrl + E, LISP wykona go natychmiast i zwrócony wynik to

234

Ponieważ w LISP nie ma deklaracji typu dla zmiennych, bezpośrednio określasz wartość symbolu z rozszerzeniem setq zbudować.

Na przykład

->(setq x 10)

Powyższe wyrażenie przypisuje wartość 10 do zmiennej x. Możesz odwołać się do zmiennej używając samego symbolu jako wyrażenia.

Plik symbol-value Funkcja pozwala wyodrębnić wartość przechowywaną w miejscu przechowywania symbolu.

Na przykład

Utwórz nowy plik kodu źródłowego o nazwie main.lisp i wpisz w nim następujący kod.

(setq x 10)
(setq y 20)
(format t "x = ~2d y = ~2d ~%" x y)

(setq x 100)
(setq y 200)
(format t "x = ~2d y = ~2d" x y)

Kiedy klikniesz przycisk Wykonaj lub naciśniesz Ctrl + E, LISP wykona go natychmiast i zwrócony wynik to.

x = 10 y = 20 
x = 100 y = 200

Zmienne lokalne

Zmienne lokalne są definiowane w ramach danej procedury. Parametry nazwane jako argumenty w definicji funkcji są również zmiennymi lokalnymi. Zmienne lokalne są dostępne tylko w ramach odpowiedniej funkcji.

Podobnie jak zmienne globalne, zmienne lokalne można również tworzyć za pomocą setq zbudować.

Istnieją dwie inne konstrukcje - let i prog do tworzenia zmiennych lokalnych.

Konstrukcja let ma następującą składnię.

(let ((var1  val1) (var2  val2).. (varn  valn))<s-expressions>)

Gdzie var1, var2, ..varn to nazwy zmiennych, a val1, val2, .. valn to początkowe wartości przypisane do odpowiednich zmiennych.

Gdy letjest wykonywana, każdej zmiennej przypisywana jest odpowiednia wartość, a na koniec oceniane jest s-wyrażenie . Zwracana jest wartość ostatniego ocenianego wyrażenia.

Jeśli nie podasz wartości początkowej zmiennej, zostanie ona przypisana nil.

Przykład

Utwórz nowy plik kodu źródłowego o nazwie main.lisp i wpisz w nim następujący kod.

(let ((x 'a) (y 'b)(z 'c))
(format t "x = ~a y = ~a z = ~a" x y z))

Kiedy klikniesz przycisk Wykonaj lub naciśniesz Ctrl + E, LISP wykona go natychmiast i zwrócony wynik to.

x = A y = B z = C

Plik prog Konstrukcja ma również listę zmiennych lokalnych jako pierwszy argument, po którym następuje treść prog, i dowolna liczba wyrażeń s.

Plik prog function wykonuje listę s-wyrażeń w kolejności i zwraca nil, chyba że napotka wywołanie funkcji o nazwie return. Następnie argument return funkcja jest obliczana i zwracana.

Przykład

Utwórz nowy plik kodu źródłowego o nazwie main.lisp i wpisz w nim następujący kod.

(prog ((x '(a b c))(y '(1 2 3))(z '(p q 10)))
(format t "x = ~a y = ~a z = ~a" x y z))

Kiedy klikniesz przycisk Wykonaj lub naciśniesz Ctrl + E, LISP wykona go natychmiast i zwrócony wynik to.

x = (A B C) y = (1 2 3) z = (P Q 10)