
- LISP 教程
- LISP - 首頁
- LISP - 概述
- LISP - 環境
- LISP - 程式結構
- LISP - 基本語法
- LISP - 資料型別
- LISP - 宏
- LISP - 變數
- LISP - 常量
- LISP - 運算子
- LISP - 決策
- LISP - 迴圈
- LISP - 函式
- LISP - 謂詞
- LISP - 數字
- LISP - 字元
- LISP - 陣列
- LISP - 字串
- LISP - 序列
- LISP - 列表
- LISP - 符號
- LISP - 向量
- LISP - 集合
- LISP - 樹
- LISP - 雜湊表
- LISP - 輸入與輸出
- LISP - 檔案 I/O
- LISP - 結構體
- LISP - 包
- LISP - 錯誤處理
- LISP - CLOS
- LISP 有用資源
- Lisp - 快速指南
- Lisp - 有用資源
- Lisp - 討論
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