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 |