LISP - 謂詞


謂詞是函式,測試其引數對一些特定的條件和返回nil,如果條件為假,或某些非nil值條件為true。

下表顯示了一些最常用的謂詞:

謂詞 描述
atom 它接受一個引數,並返回t如果引數是一個原子或,否則nil。
equal 它有兩個引數,並返回t,如果他們在結構上相同或否則nil
eq 它有兩個引數,並返回t,如果它們是相同的相同的物件,共用相同的記憶體位置或否則nil
eql 它有兩個引數,並返回t如果引數相等,或者如果他們是同一型別具有相同值的數位,或者如果他們是代表相同的字元的字元物件,否則返回nil
evenp 它接受一個數位引數,並返回t如果引數為偶數或否則為nil。
oddp 它接受一個數位引數,並返回t如果引數為奇數或否則為nil。
zerop 它接受一個數位引數,並返回t如果引數是零或否則為nil。
null 它接受一個引數,並返回t,如果引數的計算結果為nil,否則返回nil。
listp 它接受一個引數,並返回t如果引數的計算結果為一個列表,否則返回nil。
greaterp 這需要一個或多個引數,並返回t,如果不是有一個單一的引數或引數是從左到右,或如果無先後,否則為nil。
lessp 這需要一個或多個引數,並返回t,如果不是有一個單一的引數或引數是從左到右依次更小的向右,或否則為nil.
numberp 它接受一個引數,並返回t如果引數是一個數位,否則為nil。
symbolp 它接受一個引數,並返回t如果引數是一個符號,否則返回nil。
integerp 它接受一個引數,並返回t如果引數是一個整數,否則返回nil。
rationalp 它接受一個引數,並返回t如果引數是有理數,無論是比例或數量,否則返回nil>。
floatp 它接受一個引數,並返回t當引數則返回一個浮點數否則為nil。
realp 它接受一個引數,並返回t如果引數是一個實數,否則返回nil。
complexp 它接受一個引數,並返回t如果引數是一個複數,否則返回nil。
characterp 它接受一個引數,並返回t如果引數是一個字元,否則返回nil。
stringp 它接受一個引數,並返回t,如果引數是一個字串物件,否則返回nil。
arrayp 它接受一個引數,並返回t如果引數是一個陣列物件,否則返回nil。
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