Math Pro 數學補給站's Archiver

早晚都要做的事,晚做不如早做。
假如你做了,你就會有力量。

weiye 發表於 2006-4-13 00:05

[Lisp] 常用函數

lisp 語法及變數皆不分大小寫(case insensitive)。



NIL
空串列,相當於 '() 。另外真偽值表示時, T 表真, NIL 表偽。只要是任何不是 NIL (空串列) 的值,真偽值都表示真。


QUOTE
[code](QUOTE 參數)[/code]
將參數直接傳回,不做任何評估動作。可用 ' (單引號)取代


SETQ, SETF, LET
[code](SETQ 參數1 參數2)

(SETF 參數1 參數2)

(LET ((變數1名稱  變數1的值)
         (變數2名稱  變數2的值)
          ........
        )
        變數1,2...的作用範圍,既程式執行敘述
)
[/code]
SETQ, SETF 將參數1的值連結至參數2。 LET 只有在作用範圍內有效。
註: SetQ => set quote; SetF => set form
註: 全域變數習慣用兩個 * 把變數名稱包起來,例如 *globe-variable*


CAR, CDR
[code](CAR 串列參數)
(CDR 串列參數)[/code]
CAR 取得參數串列的第一個元素;CDR 取得扣掉第一個元素之後的新串列。


CONS
[code](CONS 參數1 參數串列2)[/code]
把參數1 加到參數串列2 的第一個元素,產生出新的串列。
對任一串列 A 而言, (CONS (CAR A) (CDR A)) 即為 A 。
註:如果第二個參數不是串列,則會產生出點對,故少用。


APPEND
[code](APPEND 參數串列1 參數串列2 ........ )[/code]
合併若干參數串列,形成新的串列。
註:如果最後一個參數不是串列,也會形成尾巴是帶點的串列,故少用。


LIST
[code](LIST 參數1 ........ )[/code]
將若干參數,當作是新串列的元素,形成新串列。
註: APPEND 除了最後一個之外的參數皆需為串列,而 LIST 不用。


NULL
[code](NULL 參數)[/code]
判斷參數是否為空串列(NIL)。


ATOM, LISTP, NUMBERP, ZEROP
[code](ATOM 參數)
(LISTP 參數)
(NUMBERP 參數)
(ZEROP 參數)[/code]
判斷參數是否為 atom(原子), list(串列), number(數字), zero(0) , ZEROP 的參數必須為數字。


LENGTH
[code](LENGTH 參數串列)[/code]
計算參數串列內的元素有幾個。


REVERSE
[code](REVERSE 參數串列)[/code]
將參數串列內的元素順序反過來,切記,它只會反轉第一層的元素。


EQUAL
[code](EQUAL 參數1 參數2)[/code]
比較兩參數是否相等。


=, >, <, >=, <=
[code](= 參數1 參數2)
(> 參數1 參數2)
(< 參數1 參數2)
(>= 參數1 參數2)
(<= 參數1 參數2)
[/code]
功用正如你所想,傳回值是 T 或是 NIL 。


NOT, AND, OR
[code](NOT 參數)
(AND 參數1 參數2 ...... )
(OR 參數1 參數2 ...... )
[/code]
功用正如你所想。AND 由左至右搜尋是否有 NIL ,碰到第一個滿足的元素時,就停止搜尋,然後傳回 NIL ,不然等搜尋到最後一個之後,最後一個參數就會被傳回來啦。同理, OR 會搜尋第一個非 NIL 的元素,然後就停止搜尋,把那個元素當做傳回值啦。


(to be continued... )

weiye 發表於 2006-4-13 22:25

IF, COND
[code]
(IF  測試條件  測試條件為真的執行敘述   測試條件為偽的執行敘述)


(COND ((測試條件1) (待執行敘述1))
((測試條件2) (待執行敘述2))
......
((測試條件n) (待執行敘述n))
)[/code]
由測試條件1~測試條件n逐一檢查,發現的第一個滿足的測試條件k,就執行之後的待執行敘述k,執行之後,即終止測試,並跳出此 COND 敘述。
註:下面使用方法,類似一般語言的 if-then-else 使用方式
[code](COND ((測試條件1) (待執行敘述1))
( T (待執行敘述2))
)
[/code]



DEFUN
[code](DEFUN 函數名稱 (參數1 參數2 ... )
(執行敘述1)
(執行敘述2)
.........
)[/code]
函數定義啦!如果有需要遞迴定義的話,請直接使用函數名稱。
範例:
[code](DEFUN factorial (N)
    (COND ((= N 0) 1)
          (T (* N (factorial (- N 1))))
    )
)

使用時候:
(factorial 5)
傳回結果:
120
[/code]

頁: [1]

論壇程式使用 Discuz! Archiver 6.1.0  © 2001-2007 Comsenz Inc.