LISP - Предикаты

Предикаты - это функции, которые проверяют свои аргументы на предмет определенных условий и возвращают ноль, если условие ложно, или какое-то ненулевое значение, если условие истинно.

В следующей таблице показаны некоторые из наиболее часто используемых предикатов -

Sr. No. Предикат и описание
1

atom

Он принимает один аргумент и возвращает t, если аргумент является атомом, или ноль, если в противном случае.

2

equal

Он принимает два аргумента и возвращает t если они структурно равны или nil иначе.

3

eq

Он принимает два аргумента и возвращает t если это одинаковые идентичные объекты, разделяющие одну и ту же ячейку памяти или nil иначе.

4

eql

Он принимает два аргумента и возвращает t если аргументы eq, или если это числа одного типа с одинаковым значением, или если они являются символьными объектами, представляющими один и тот же символ, или nil иначе.

5

evenp

Он принимает один числовой аргумент и возвращает t если аргумент - четное число или nil в противном случае.

6

oddp

Он принимает один числовой аргумент и возвращает t если аргумент нечетное число или nil в противном случае.

7

zerop

Он принимает один числовой аргумент и возвращает t если аргумент равен нулю или nil в противном случае.

8

null

Он принимает один аргумент и возвращает t если аргумент равен нулю, иначе он возвращает nil.

9

listp

Он принимает один аргумент и возвращает t если аргумент оценивается как список, иначе он возвращает nil.

10

greaterp

Он принимает один или несколько аргументов и возвращает t если либо один аргумент, либо аргументы последовательно увеличиваются слева направо, либо nil в противном случае.

11

lessp

Он принимает один или несколько аргументов и возвращает t если либо один аргумент, либо аргументы последовательно уменьшаются слева направо, либо nil в противном случае.

12

numberp

Он принимает один аргумент и возвращает t если аргумент - число или nil в противном случае.

13

symbolp

Он принимает один аргумент и возвращает t если аргумент является символом, иначе он возвращает nil.

14

integerp

Он принимает один аргумент и возвращает t если аргумент является целым числом, иначе он возвращает nil.

15

rationalp

Он принимает один аргумент и возвращает t если аргумент - рациональное число, либо отношение, либо число, в противном случае возвращается nil.

16

floatp

Он принимает один аргумент и возвращает t если аргумент является числом с плавающей запятой, иначе он возвращает nil.

17

realp

Он принимает один аргумент и возвращает t если аргумент является действительным числом, иначе возвращается nil.

18

complexp

Он принимает один аргумент и возвращает t если аргумент - комплексное число, иначе возвращается nil.

19

characterp

Он принимает один аргумент и возвращает t если аргумент является символом, иначе он возвращает nil.

20

stringp

Он принимает один аргумент и возвращает t если аргумент является строковым объектом, иначе он возвращает nil.

21 год

arrayp

Он принимает один аргумент и возвращает t если аргумент является объектом массива, иначе он возвращает nil.

22

packagep

Он принимает один аргумент и возвращает t если аргумент - пакет, иначе он возвращает nil.

Пример 1

Создайте новый файл исходного кода с именем main.lisp и введите в него следующий код.

(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 ))

Когда вы выполняете код, он возвращает следующий результат -

T
NIL
T
NIL
T
NIL
NIL
NIL
T

Пример 2

Создайте новый файл исходного кода с именем main.lisp и введите в него следующий код.

(defun factorial (num)
   (cond ((zerop num) 1)
      (t ( * num (factorial (- num 1))))
   )
)
(setq n 6)
(format t "~% Factorial ~d is: ~d" n (factorial n))

Когда вы выполняете код, он возвращает следующий результат -

Factorial 6 is: 720