標題: [Lisp] 常用函數 [打印本頁]
作者: weiye 時間: 2006-4-13 00:05 標題: [Lisp] 常用函數
lisp 語法及變數皆不分大小寫(case insensitive)。
NIL
空串列,相當於 '() 。另外真偽值表示時, T 表真, NIL 表偽。只要是任何不是 NIL (空串列) 的值,真偽值都表示真。
QUOTE複製內容到剪貼板
代碼:
(QUOTE 參數)
將參數直接傳回,不做任何評估動作。可用 ' (單引號)取代
SETQ, SETF, LET複製內容到剪貼板
代碼:
(SETQ 參數1 參數2)
(SETF 參數1 參數2)
(LET ((變數1名稱 變數1的值)
(變數2名稱 變數2的值)
........
)
變數1,2...的作用範圍,既程式執行敘述
)
SETQ, SETF 將參數1的值連結至參數2。 LET 只有在作用範圍內有效。
註: SetQ => set quote; SetF => set form
註: 全域變數習慣用兩個 * 把變數名稱包起來,例如 *globe-variable*
CAR, CDR複製內容到剪貼板
代碼:
(CAR 串列參數)
(CDR 串列參數)
CAR 取得參數串列的第一個元素;CDR 取得扣掉第一個元素之後的新串列。
CONS複製內容到剪貼板
代碼:
(CONS 參數1 參數串列2)
把參數1 加到參數串列2 的第一個元素,產生出新的串列。
對任一串列 A 而言, (CONS (CAR A) (CDR A)) 即為 A 。
註:如果第二個參數不是串列,則會產生出點對,故少用。
APPEND複製內容到剪貼板
代碼:
(APPEND 參數串列1 參數串列2 ........ )
合併若干參數串列,形成新的串列。
註:如果最後一個參數不是串列,也會形成尾巴是帶點的串列,故少用。
LIST複製內容到剪貼板
代碼:
(LIST 參數1 ........ )
將若干參數,當作是新串列的元素,形成新串列。
註: APPEND 除了最後一個之外的參數皆需為串列,而 LIST 不用。
NULL複製內容到剪貼板
代碼:
(NULL 參數)
判斷參數是否為空串列(NIL)。
ATOM, LISTP, NUMBERP, ZEROP複製內容到剪貼板
代碼:
(ATOM 參數)
(LISTP 參數)
(NUMBERP 參數)
(ZEROP 參數)
判斷參數是否為 atom(原子), list(串列), number(數字), zero(0) , ZEROP 的參數必須為數字。
LENGTH複製內容到剪貼板
代碼:
(LENGTH 參數串列)
計算參數串列內的元素有幾個。
REVERSE複製內容到剪貼板
代碼:
(REVERSE 參數串列)
將參數串列內的元素順序反過來,切記,它只會反轉第一層的元素。
EQUAL複製內容到剪貼板
代碼:
(EQUAL 參數1 參數2)
比較兩參數是否相等。
=, >, <, >=, <=複製內容到剪貼板
代碼:
(= 參數1 參數2)
(> 參數1 參數2)
(< 參數1 參數2)
(>= 參數1 參數2)
(<= 參數1 參數2)
功用正如你所想,傳回值是 T 或是 NIL 。
NOT, AND, OR複製內容到剪貼板
代碼:
(NOT 參數)
(AND 參數1 參數2 ...... )
(OR 參數1 參數2 ...... )
功用正如你所想。AND 由左至右搜尋是否有 NIL ,碰到第一個滿足的元素時,就停止搜尋,然後傳回 NIL ,不然等搜尋到最後一個之後,最後一個參數就會被傳回來啦。同理, OR 會搜尋第一個非 NIL 的元素,然後就停止搜尋,把那個元素當做傳回值啦。
(to be continued... )
作者: weiye 時間: 2006-4-13 22:25
IF, COND複製內容到剪貼板
代碼:
(IF 測試條件 測試條件為真的執行敘述 測試條件為偽的執行敘述)
(COND ((測試條件1) (待執行敘述1))
((測試條件2) (待執行敘述2))
......
((測試條件n) (待執行敘述n))
)
由測試條件1~測試條件n逐一檢查,發現的第一個滿足的測試條件k,就執行之後的待執行敘述k,執行之後,即終止測試,並跳出此 COND 敘述。
註:下面使用方法,類似一般語言的 if-then-else 使用方式複製內容到剪貼板
代碼:
(COND ((測試條件1) (待執行敘述1))
( T (待執行敘述2))
)
DEFUN複製內容到剪貼板
代碼:
(DEFUN 函數名稱 (參數1 參數2 ... )
(執行敘述1)
(執行敘述2)
.........
)
函數定義啦!如果有需要遞迴定義的話,請直接使用函數名稱。
範例:複製內容到剪貼板
代碼:
(DEFUN factorial (N)
(COND ((= N 0) 1)
(T (* N (factorial (- N 1))))
)
)
使用時候:
(factorial 5)
傳回結果:
120
歡迎光臨 Math Pro 數學補給站 (https://math.pro/db/) |
論壇程式使用 Discuz! 6.1.0 |