<< lekcja 21 | lekcja 23 >>
22. Tablice
Tablice w LISP nie są listami, lecz osobnymi strukturami. Ich notacja poprzedzona jest znakiem #.
Tak więc (1 2 3) jest listą składającą sięz 3 elementów, natomiast #(1 2 3) jest jednowymiarową
tablicą składającą się również z trzech elementów, identycznych jak poprzednio. W LISP istniej
kilka instrukcji pozwalających tworzyć i operować na elementach tablic.
22.1 make-array
Instrukcja make-array służy do stworzenia pustej tablicy o wybranych wymiarach. Wywołuje się ją
w postaci (make-array dimensions), gdzie dimensions jest listą dodatnich wartości całkowitych
będących kolejnymi wymiarami macierzy. Porządek macierzy jest wierszowy, tak więc wywołanie
(make-array '(3 4)) stworzy nam tablicę składającą się z 3 wierszy, każdy po 4 elementy. Można również
zainicjować tablicę 0 wymiarową, która może przechowywać tylko jeden element. Tworzone tablice
są indeksowane od 0 do n-1, gdzie n jest wymiarem danego stopnia tablicy.
22.1
> (make-array '(2 3)) => #2a((nil nil nil)(nil nil nil))
|
22.2 aref
Instrukcja aref pozwala dostać się do wybranego elementu tablicy. Ma ona postać następującą
(aref table index1 index2 ...), gdzie table, to tablica, do której elementów chcemy się dostać,
natomist index1... to kolejne indeksy elementu, do którego chcemy się dostać. Ich liczba musi być
równa stopniowi (ilości wymiarów) tablicy. W połączeniu z instrukcją setf, możemy modyfikować
zawartość tablicy.
22.2
> (setq tablica (make-array '(2 3)) => #2a((nil nil nil)(nil nil nil))
> (aref tablica 0 0) => nil
> (setf (aref tablica 0 0) 1) => nil
> (aref tablica 0 0) => 1
|
22.3 array-rank
Instrukcja array-rank pozwala dowiedzieć się jaki jest stopień (liczba wymiarów) danej tablicy.
Ma ona postać (array-rank table).
22.3
> (array-rank (make-array '(4 5)) => 2
|
22.4 array-dimension
Isntrukcja array-dimension pozwala na zbadanie konkretnego wymiaru zadanej tablic. Wywoływan jest
ona w następujący sposób: (array-dimension table axis-number), gdzie table, to badana tablica,
zaś axis-number, jest numerem wymiaru, który badamy. Axis-number musi być mniejszy od liczby wymiarów
danej tablicy.
22.4
> (array-dimension (make-array '(4 5)) 0) => 4
|
Jeśli instrukcję tę wywołamy nie podając numeru wymiaru, to otrzymamy listę zawierającą poszczególne
wymiary badanej tablicy.
<< lekcja 21 | lekcja 23 >> |