Lisp - 谓词



谓词是用于测试其参数是否满足某些特定条件的函数,如果条件为假,则返回 nil,如果条件为真,则返回某个非 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

示例

创建一个名为 main.lisp 的新源代码文件,并在其中键入以下代码。

main.lisp

; check and print if abcd is an atom?
(write (atom 'abcd))
; terminate printing
(terpri)
; check and print if a is equals to b
(write (equal 'a 'b))
; terminate printing
(terpri)
; check and print if 10 is an even number
(write (evenp 10))
; terminate printing
(terpri)
; check and print if 7 is an even number
(write (evenp 7 ))
; terminate printing
(terpri)
; check and print if 7 is an odd number
(write (oddp 7 ))
; terminate printing
(terpri)
; check and print if provided number is 0
(write (zerop 0.0000000001))
; terminate printing
(terpri)
; check and print if 3 and 3.0 are same
(write (eq 3 3.0 ))
; terminate printing
(terpri)
;check and print if 3 and 3.0 are same
(write (equal 3 3.0 ))
; terminate printing
(terpri)
; check and print if nil is nil
(write (null nil ))

输出

执行代码时,它会返回以下结果:

T
NIL
T
NIL
T
NIL
NIL
NIL
T

示例

更新名为 main.lisp 的源代码文件,并在其中键入以下代码。

main.lisp

; define a function factorial
(defun factorial (num)
   ; if num is zero, return 1
   (cond ((zerop num) 1)
      ; call factorial recursively with one less number
      (t ( * num (factorial (- num 1))))
   )
)
; set n as 6
(setq n 6)
; print the factorial of the number
(format t "~% Factorial ~d is: ~d" n (factorial n))

输出

执行代码时,它会返回以下结果:

Factorial 6 is: 720
广告