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