LISP - Predykaty
Predykaty to funkcje, które sprawdzają swoje argumenty pod kątem określonych warunków i zwracają zero, jeśli warunek jest fałszywy lub jeśli warunek jest prawdziwy, lub jakaś wartość inna niż zero to prawda.
W poniższej tabeli przedstawiono niektóre z najczęściej używanych predykatów -
Sr.No. | Predykat i opis |
---|---|
1 | atom Pobiera jeden argument i zwraca t, jeśli argumentem jest atom lub nil, jeśli jest inaczej. |
2 | equal Pobiera dwa argumenty i zwraca t jeśli są strukturalnie równe lub nil Inaczej. |
3 | eq Pobiera dwa argumenty i zwraca t jeśli są to te same identyczne obiekty, współdzielące tę samą lokalizację pamięci lub nil Inaczej. |
4 | eql Pobiera dwa argumenty i zwraca t jeśli argumentami są eqlub jeśli są to liczby tego samego typu o tej samej wartości lub jeśli są to obiekty znakowe, które reprezentują ten sam znak, lub nil Inaczej. |
5 | evenp Pobiera jeden argument numeryczny i zwraca t jeśli argument jest liczbą parzystą lub nil jeśli inaczej. |
6 | oddp Pobiera jeden argument numeryczny i zwraca t jeśli argument jest liczbą nieparzystą lub nil jeśli inaczej. |
7 | zerop Pobiera jeden argument numeryczny i zwraca t jeśli argumentem jest zero lub nil jeśli inaczej. |
8 | null Pobiera jeden argument i zwraca t jeśli wartość argumentu wynosi zero, w przeciwnym razie zwraca nil. |
9 | listp Pobiera jeden argument i zwraca t jeśli argument zwraca listę, w przeciwnym razie zwraca nil. |
10 | greaterp Pobiera jeden lub więcej argumentów i zwraca t jeśli jest pojedynczy argument lub argumenty są kolejno większe od lewej do prawej, lub nil jeśli inaczej. |
11 | lessp Pobiera jeden lub więcej argumentów i zwraca t jeśli jest pojedynczy argument lub argumenty są sukcesywnie mniejsze od lewej do prawej, lub nil jeśli inaczej. |
12 | numberp Pobiera jeden argument i zwraca t jeśli argument jest liczbą lub nil jeśli inaczej. |
13 | symbolp Pobiera jeden argument i zwraca t jeśli argument jest symbolem, w przeciwnym razie zwraca nil. |
14 | integerp Pobiera jeden argument i zwraca t jeśli argument jest liczbą całkowitą, w przeciwnym razie zwraca nil. |
15 | rationalp Pobiera jeden argument i zwraca t jeśli argument jest liczbą wymierną, albo stosunkiem, albo liczbą, w przeciwnym razie zwraca nil. |
16 | floatp Pobiera jeden argument i zwraca t jeśli argument jest liczbą zmiennoprzecinkową, w przeciwnym razie zwraca nil. |
17 | realp Pobiera jeden argument i zwraca t jeśli argument jest liczbą rzeczywistą, w przeciwnym razie zwraca nil. |
18 | complexp Pobiera jeden argument i zwraca t jeśli argument jest liczbą zespoloną, w przeciwnym razie zwraca nil. |
19 | characterp Pobiera jeden argument i zwraca t jeśli argument jest znakiem, w przeciwnym razie zwraca nil. |
20 | stringp Pobiera jeden argument i zwraca t jeśli argument jest obiektem typu string, w przeciwnym razie zwraca nil. |
21 | arrayp Pobiera jeden argument i zwraca t jeśli argument jest obiektem tablicy, w przeciwnym razie zwraca nil. |
22 | packagep Pobiera jeden argument i zwraca t jeśli argument jest pakietem, w przeciwnym razie zwraca nil. |
Przykład 1
Utwórz nowy plik kodu źródłowego o nazwie main.lisp i wpisz w nim następujący kod.
(write (atom 'abcd))
(terpri)
(write (equal 'a 'b))
(terpri)
(write (evenp 10))
(terpri)
(write (evenp 7 ))
(terpri)
(write (oddp 7 ))
(terpri)
(write (zerop 0.0000000001))
(terpri)
(write (eq 3 3.0 ))
(terpri)
(write (equal 3 3.0 ))
(terpri)
(write (null nil ))
Po wykonaniu kodu zwraca następujący wynik -
T
NIL
T
NIL
T
NIL
NIL
NIL
T
Przykład 2
Utwórz nowy plik kodu źródłowego o nazwie main.lisp i wpisz w nim następujący kod.
(defun factorial (num)
(cond ((zerop num) 1)
(t ( * num (factorial (- num 1))))
)
)
(setq n 6)
(format t "~% Factorial ~d is: ~d" n (factorial n))
Po wykonaniu kodu zwraca następujący wynik -
Factorial 6 is: 720