函數是一組一起執(zhí)行任務的語句。
可以把代碼放到單獨的函數。如何劃分代碼之前不同的功能,但在邏輯上劃分通常是這樣每個函數執(zhí)行特定的任務。
命名函數defun宏用于定義函數。該函數的defun宏需要三個參數:
函數名稱
函數的參數
函數的體
defun語法是:
(defun name (parameter-list) "Optional documentation string." body)
讓我們舉例說明概念,簡單的例子。
例子 1
讓我們編寫了一個名為averagenum,將打印四個數字的平均值的函數。我們將會把這些數字作為參數。
創(chuàng)建一個名為main.lisp一個新的源代碼文件,并在其中輸入如下代碼:
(defun averagenum (n1 n2 n3 n4) (/ ( + n1 n2 n3 n4) 4)) (write(averagenum 10 20 30 40))
當執(zhí)行的代碼,它返回以下結果:
25
示例 2
讓我們定義和調用函數,將計算出的圓的面積,圓的半徑被指定作為參數的函數。
創(chuàng)建一個名為main.lisp一個新的源代碼文件,并在其中輸入如下代碼:
(defun area-circle(rad) "Calculates area of a circle with given radius" (terpri) (format t "Radius: ~5f" rad) (format t "~%Area: ~10f" (* 3.141592 rad rad))) (area-circle 10)
當執(zhí)行的代碼,它返回以下結果:
請注意:
可以提供一個空的列表作為參數,這意味著函數沒有參數,該列表是空的,表示為()。
LISP還允許可選,多個和關鍵字參數。
文檔字符串描述了函數的目的。它與函數名相關聯(lián),并且可以使用文檔函數來獲得。
函數的主體可以包含任意數量的Lisp表達式。
在主體內的最后一個表達式的值返回函數的值。
還可以使用返回 - 從特殊的運算符函數返回一個值。
讓我們討論在簡要上述概念。點擊以下鏈接,了解詳細信息:
可以使用可選參數定義一個函數。要做到這一點,需要把符號與可選的可選參數的名稱之前。
我們將只是顯示它接收的參數的函數。
示例
創(chuàng)建一個名為main.lisp一個新的源代碼文件,并在其中輸入如下代碼:
(defun show-members (a b &optional c d) (write (list a b c d))) (show-members 1 2 3) (terpri) (show-members 'a 'b 'c 'd) (terpri) (show-members 'a 'b) (terpri) (show-members 1 2 3 4)
當執(zhí)行代碼,它返回以下結果:
(1 2 3 NIL) (A B C D) (A B NIL NIL) (1 2 3 4)
請注意,參數c和d是在上面的例子中,是可選參數。
有些函數需要采用可變數目的參數。
例如,我們使用格式化函數需要兩個必需的參數,數據流和控制字符串。然而,該字符串后,它需要一個可變數目的取決于要顯示的字符串中的值的數目的參數。
同樣,+ 函數,或 * 函數也可以采取一個可變數目的參數。
可以提供這種可變數目的使用符號與其余參數。
下面的例子說明了這個概念:
示例
創(chuàng)建一個名為main.lisp一個新的源代碼文件,并在其中輸入如下代碼:
(defun show-members (a b &rest values) (write (list a b values))) (show-members 1 2 3) (terpri) (show-members 'a 'b 'c 'd) (terpri) (show-members 'a 'b) (terpri) (show-members 1 2 3 4) (terpri) (show-members 1 2 3 4 5 6 7 8 9)
當執(zhí)行代碼,它返回以下結果:
(1 2 (3)) (A B (C D)) (A B NIL) (1 2 (3 4)) (1 2 (3 4 5 6 7 8 9))
關鍵字參數允許指定哪個值與特定的參數。
它使用的是 &key 符號表示。
當發(fā)送的值到該函數必須先于值 :parameter-name.
下面的例子說明了這個概念。
例子
創(chuàng)建一個名為main.lisp一個新的源代碼文件,并在其中輸入如下代碼:
(defun show-members (&key a b c d ) (write (list a b c d))) (show-members :a 1 :c 2 :d 3) (terpri) (show-members :a 'p :b 'q :c 'r :d 's) (terpri) (show-members :a 'p :d 'q) (terpri上一篇:LISP - 輸入和輸出下一篇:LISP - 數組