Sekwencje
Sekwencja grupa typów danych (listy, wektory, tablice, ciągi znaków).
Funkcje działające na sekwencjach:
1. Makesequence. Ta funkcja tworzy sekwencje o zadanym typie. Typy są takie: list, array, vector, string. Wywolamy tę funckje:
(makesequence typ_danych rozmiar)
Przykład: (makesequence ‘list 4). Stworzy nam liste z elementami nil. Jeśli chemy stworzyć listę z zadanymi elementami, powinniśmy dopisać :initialelement ;
Naprzykład, chcemy stworzyć listę z 4 elementami, które są równe 0: (makesequence ‘list 4 :initialelement 0) ;
2. Concatenate. Ta funkcja łacze dwie sekwencji w jedną.
(concatenate typ_danych sekwencja sekwencja) Przykład: (concatenate 'string "Hel o" " " "world") 3.Elt. Funkcja zwraca nelement sekwencji.
(elt sekwencja pozycja)
Naprzykład:(elt '(NIL T 1 6 "cat") 3)
=> 6
Zwróci 6 bo rachujemy 1 element jak 0.
4. Aref. Ta funkcja działa jak elt, no może być zastosowana dla tablic wielomiarowych.
(aref sekwencja pozycja)
Naprzykład: (aref (makearray '(10 10) :initialelement "World") 9 9); W tablice wielomiarowej 10x10 zapisaliśmy każdy element jako string World. I wywolujemy element 9 9. wynnik: World.
5. Subseq. Ta funkcja wypisuje sekwencje, zaczynającą się od elementu początek a kończącą się elementem koniec.
(subseq sekwencja początek koniec)
Przykład: (subseq "Hel o world" 3 5); Funkcja wypisze nam "lo". Możemy nie zanzaczać koniec, jeśli chcemy wypisać od elementu początek aż do końca sekwencji.
6. Copyseq. Ta funkcja zwraca kopie sekwencji (copyseq sekwencja)
Przykład: (copyseq "Hel o world"). W wynniku: “Hel o world”).
7. Reverse. Ta funkcja odwraca kolejność elementów w sekwencji.
(reverse sekwencja)
(defun REV (L)
(cond
((n
ll L) nil)
((listp L)
(append
(REV (cdr L))
(list (car L))))
(t
)))
Przykłąd: (reverse ‘(Hel o world) ). Wynnik: world Hel o.
8. Length. Zwraca ilość elementów w sekwencji.
(length sekwencja)
Przykład: (length '(Hel o world)); Wynnik: 2;
(defun listlength1 (x)
(do ((n 0 (+ n 2)) ;Counter
(fast x (cdr(cdr fast))) ;Fast pointer: leaps by 2
(slow x (cdr slow))) ;Slow pointer: leaps by 1
(nil)
(when (endp fast) (return n))
(when (endp (cdr fast)) (return (+ n 1)))
(when (and (eq fast slow) (> n 0)) (return nil)))) 9. Count. Zwraca liczbę elementów w sekwencji (count n sekwencja)
Przykład: (count 4 ‘(1 2 3 4 4)) => 2
(defun cou
10. Countif. Zwraca liczbę elementów które są zgodne z funkcją (countif funkcja sekwenja)
Przykład:(countif #’NUMBERP ‘(2 2 1 a)) => 3
11. Countifnot. Zwraca liczbę elementów które są nie zgodne z funkcją.
(countifnot funkcja sekwenja)
Przykład:(countifnot #’NUMBERP ‘(2 2 1 a)) => 1
12. Remove. Ta funkcja usuwa wszystkie wystąpienia danego elementu z sekwencji.
(remove element sekwencja) Przykład: (remove 3 '( 1 2 3 4 5 3)); Wynnik (1 2 4 5).
13. Removeif. Ta funkcja działa jak remove, tylko usuwa wszystkie elementy dla których podana funkcja zwróci wartość prawdy (t).
(removeif #'funkcja sekwencja)
Przykład: (removeif #'oddp '(1 2 4 1 3 4 5)); Wynnik: (2 4 4);
14. Removeifnot. Funkcja odwrotna do removeif.
(removeifnot #'funkcja sekwencja)
Przykład: (removeifnot #'evenp '(1 2 4 1 3 4 5)); Wynnik:(2 4 4);
15. Substitute.Funkcja zastępuje każdy element zastąpiony zastępowanym.
(substitute zastąpiony zastępowany sekwencja) Przykład:(substitute 0 1 ‘(0 1 1 0)) => (0 0 0 0) 16. Substituteif.Zastępuje wszystkie wystąpienia elementu zastępowany dla których funkcja zwróci wartość prawdy.
(substituteif zastępowany funkcja sekwencja) Przykład:(substituteif 'number #'numberp '(a b 3 d "yo" 4.2 e))
=>(A B NUMBER D "yo" NUMBER E)
17. Substituteifnot. Zastępuje wszystkie wystąpienia elementu zastępowany dla których funkcja zwróci wartość falszu.
Przykład:(substituteif 'notnumber #'numberp '(a b 3 d "yo" 4.2 e))
=>(NOTNUMBER NOTNUMBER 3 NOTNUMBER NOTNUMBER 4.2 NOTNUMBER) 18. Removeduplicates. Funkcja usuwa wszystkie powtarzające się elementy z sekwencji.
(removeduplicates sekwecja)
Przykład: (removeduplicates '(1 2 2 3)); Wynik: (1 2 3);
19.Merge. Funkcja łączy dwie sekwencje o podanym typie ustalając kolejność za pomocą funkcji przekazywanej jako czwarty parametr.
Przykład: (merge 'list (list 1 2 3)(list 2 3 4) #'>); Wynik: (2 3 4 1 2 3);
20.Position. Ta funkcja zwraca pozycje elementu w sekwencj, a jeśli takiego elementu niema, to zwraca nil.
(position element sekwencja)
Przykład:(position 'A '( B C A D)); Wynik: 2;
21. Find. Ta funkcja zwraca znaleziony element w sekwencji, a jeśli takiego elementu niema, to zwraca wartość nil.
(find element sekwencja)
Przykład: (find 'a '(b c d f a)); Wynik: A;
22. Search .Funkcja zwraca pozycję znalezionego elementa w sekwencji lub wartość nil.
(search sekwecja1 sekwencja2)
Przykład: (search ‘(1 23) ‘(2 3 5 0 11)) => NIL
23. Sort. Funkcja sortuje sekwencję za pomocą funkcji przekazywanej jako drugi parametr.
(sort sekwencja #'>)
Przykład: (sort ‘(2 4 10 1 0) #’<) =>(0 1 2 4 10) Tablica haszująca
Tablica haszująca lub tablica mieszająca, to struktura dannych, która jest jednym ze sposobów realizacji tablicy asocjacyjnej. Umożliwia również szybkie porównywanie dannych. Tablica zawira klucz i argument klucza. Możliwe są takie działania: 1)Stworzenie tablicy. Dla jej stworzenia wykorzysta się makehachtable Przykład: (setq table(makehashtable)),
(setq a(makehashtable)), gdzie a i table to nazwy tablic;
2)Zapisywanie dannych do tablicy. Dla zapisywania wykorzysta się gethash Przykłady: (setf(gethash “name” a)’Andrey)=>ANDREY
(setf(gethash ‘color a)’gray)=>BROWN.
3) Odczytywanie dannych za pomocą klucza.
Przykłady: (gethash ‘name a)=>Andrey;
(gethash ‘color a)=>Gray.
4) Porównywanie tablic. Dla porównia wykarzysta się equalp Przykłady: (equapl a b).
Tablica asocjatywna składa się z par klucz i wartość.
Dla stworzenia tablicy należy użyć
setq alist
Przykład:
(setq alist ‘((c . 5)));
Dla zwracania par klucza należy użyć assoc
Przykład:
(cdr(assoc ‘c alist));