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