apohllo.pl
więcej niż strona domowa...
 

Lekcja 4

Spis treści | Lekcja 3 | Lekcja 5

4. Set Quantity – setq i setf

We wczesnych dialektach Lispa istniała tylko funkcja SETQ, zaś uogólnione zmienne były niedostępne. Obecnie funkcja SETQ jest nadal używana, jednak w nowszych wersjach programiści używają raczej podobnego znaczeniowo makra SETF, które pozwala na przechowywanie w zarówno zwykłych zmiennych takich jak X, jak i w uogólnionych zmiennych takich jak (SECOND X).

4.1

(setq x '(wartosc)) => (WARTOSC)

Funkcja SET, podobnie jak SETQ, wywodzi się z najwcześniejszych odmian Lispa. Jednak jej znaczenie zmieniło się. W Common Lisp SET zachowuje wartość w odpowiedniej komórce, a dokładniej ustawia symbol jako nazwę zmiennej globalnej, nawet jeżeli istnieje już zmienna lokalna o tej samej nazwie.

4.2 zmienna globalna KACZKA

(setf kaczka 'donald)

4.3 zmienna lokalna KACZKA

(defun test1 (kaczka)
  (list kaczka
    (symbol-value 'kaczka)
  )
)
(test1 'kwak)                  => (kwak donald)

4.4 zmiana zmiennej globalnej KACZKA

(defun test2 (kaczka)
  (set 'kaczka 'daffy)
  (list kaczka
    (symbol-value 'kaczka)
  )
)
(test2 'kwak)                   => (kwak daffy)
kaczka                          => daffy

Specjalna forma SETF używa swojego pierwszego argumentu do zdefiniowania miejsca w pamięci, analizuje drugi argument i zapisuje wynik w wynikowej pozycji pamięci.

4.5

(setq tablica (make-array 3))   =>  #(NIL NIL NIL)
(aref tablica 1)                =>  NIL
(setf (aref tablica 1) 3)       =>  3
tablica                         =>  #(NIL 3 NIL)

Spis treści | Lekcja 3 | Lekcja 5

lisp | Opublikowano 10:51 27-11-2010. Ostatnia modyfikacja 10:54 27-11-2010 |
comments powered by Disqus