鍍金池/ 教程/ Java/ LISP - 謂詞
LISP - 樹(shù)
LISP - 錯(cuò)誤處理
LISP - 謂詞
LISP - 決策
LISP - 變量
LISP - 數(shù)組
LISP - 對(duì)象系統(tǒng)(CLOS)
LISP - 輸入和輸出
Lisp教程
LISP - 數(shù)字
LISP - 循環(huán)
LISP - 常量
LISP - 集合
LISP - 字符
LISP - 程序結(jié)構(gòu)
LISP - 文件I/O
LISP - 哈希表
LISP - 宏
LISP - 數(shù)據(jù)類型
LISP - 包
LISP - 符號(hào)
LISP - 運(yùn)算符
LISP - 基本語(yǔ)法
LISP - 函數(shù)
LISP - 向量
LISP - 結(jié)構(gòu)
LISP - 概述介紹

LISP - 謂詞

謂詞是函數(shù),測(cè)試其參數(shù)對(duì)一些特定的條件和返回nil,如果條件為假,或某些非nil值條件為true。

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

謂詞 描述
atom 它接受一個(gè)參數(shù),并返回t如果參數(shù)是一個(gè)原子或,否則nil。
equal 它有兩個(gè)參數(shù),并返回t,如果他們?cè)诮Y(jié)構(gòu)上相同或否則nil
eq 它有兩個(gè)參數(shù),并返回t,如果它們是相同的相同的對(duì)象,共享相同的內(nèi)存位置或否則nil
eql 它有兩個(gè)參數(shù),并返回t如果參數(shù)相等,或者如果他們是同一類型具有相同值的數(shù)字,或者如果他們是代表相同的字符的字符對(duì)象,否則返回nil
evenp 它接受一個(gè)數(shù)字參數(shù),并返回t如果參數(shù)為偶數(shù)或否則為nil。
oddp 它接受一個(gè)數(shù)字參數(shù),并返回t如果參數(shù)為奇數(shù)或否則為nil。
zerop 它接受一個(gè)數(shù)字參數(shù),并返回t如果參數(shù)是零或否則為nil。
null 它接受一個(gè)參數(shù),并返回t,如果參數(shù)的計(jì)算結(jié)果為nil,否則返回nil。
listp 它接受一個(gè)參數(shù),并返回t如果參數(shù)的計(jì)算結(jié)果為一個(gè)列表,否則返回nil。
greaterp 這需要一個(gè)或多個(gè)參數(shù),并返回t,如果不是有一個(gè)單一的參數(shù)或參數(shù)是從左到右,或如果無(wú)先后,否則為nil。
lessp 這需要一個(gè)或多個(gè)參數(shù),并返回t,如果不是有一個(gè)單一的參數(shù)或參數(shù)是從左到右依次更小的向右,或否則為nil.
numberp 它接受一個(gè)參數(shù),并返回t如果參數(shù)是一個(gè)數(shù)字,否則為nil。
symbolp 它接受一個(gè)參數(shù),并返回t如果參數(shù)是一個(gè)符號(hào),否則返回nil。
integerp 它接受一個(gè)參數(shù),并返回t如果參數(shù)是一個(gè)整數(shù),否則返回nil。
rationalp 它接受一個(gè)參數(shù),并返回t如果參數(shù)是有理數(shù),無(wú)論是比例或數(shù)量,否則返回nil>。
floatp 它接受一個(gè)參數(shù),并返回t當(dāng)參數(shù)則返回一個(gè)浮點(diǎn)數(shù)否則為nil。
realp 它接受一個(gè)參數(shù),并返回t如果參數(shù)是一個(gè)實(shí)數(shù),否則返回nil。
complexp 它接受一個(gè)參數(shù),并返回t如果參數(shù)是一個(gè)復(fù)數(shù),否則返回nil。
characterp 它接受一個(gè)參數(shù),并返回t如果參數(shù)是一個(gè)字符,否則返回nil。
stringp 它接受一個(gè)參數(shù),并返回t,如果參數(shù)是一個(gè)字符串對(duì)象,否則返回nil。
arrayp 它接受一個(gè)參數(shù),并返回t如果參數(shù)是一個(gè)數(shù)組對(duì)象,否則返回nil。
packagep 它接受一個(gè)參數(shù),并返回t,如果參數(shù)是一個(gè)包,否則返回nil。

示例 1

創(chuàng)建一個(gè)名為main.lisp一個(gè)新的源代碼文件,并在其中輸入如下代碼:

(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 ))

當(dāng)執(zhí)行以上代碼,它返回以下結(jié)果:

T
NIL
T
NIL
T
NIL
NIL
NIL
T

示例 2

創(chuàng)建一個(gè)名為main.lisp一個(gè)新的源代碼文件,并在其中輸入如下代碼:

(defun factorial (num)
   (cond ((zerop num) 1)
       (t ( * num (factorial (- num 1))))))
(setq n 6)
(format t "~% Factorial ~d is: ~d" n (factorial n))

當(dāng)執(zhí)行以上代碼,它返回以下結(jié)果:

Factorial 6 is: 720