LISP - 谓词

谓词是在某些特定条件下测试其参数的函数,如果条件为 false,则返回 nil,或者如果条件为 true,则返回某个非 nil 值。

下表显示了一些最常用的谓词 −

序号 谓词 & 描述
1

atom

它接受一个参数,如果参数是原子则返回 t,否则返回 nil。

2

equal

它接受两个参数,如果它们结构相等则返回t,否则返回nil

3

eq

它接受两个参数,如果它们是相同的相同对象,共享相同的内存位置,则返回t,否则返回nil

4

eql

它接受两个参数,如果参数是 eq,或者它们是具有相同值的相同类型的数字,或者它们是字符对象,则返回 t 代表相同的字符,否则 nil

5

evenp

它接受一个数字参数,如果参数为偶数则返回 t,否则返回 nil

6

oddp

它接受一个数字参数,如果参数为奇数则返回 t,否则返回 nil

7

zerop

它接受一个数字参数,如果参数为零则返回 t,否则返回 nil

8

null

它接受一个参数,如果参数计算结果为 nil,则返回 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