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
廣告