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