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