
- 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 - 宏
宏允許您擴充套件標準 LISP 的語法。
從技術上講,宏是一個函式,它以 s-表示式作為引數,並返回一個 LISP 表示式,然後對其進行求值。
定義宏
在 LISP 中,命名宏是使用另一個名為defmacro的宏定義的。定義宏的語法為:
(defmacro macro-name (parameter-list)) "Optional documentation string." body-form
宏定義包括宏的名稱、引數列表、可選的文件字串以及定義宏要執行的任務的 Lisp 表示式體。
示例 - 建立宏
讓我們編寫一個名為 setTo10 的簡單宏,它將接收一個數字並將它的值設定為 10。
建立一個名為 main.lisp 的新原始碼檔案,並在其中鍵入以下程式碼。
main.lisp
; define a macro accepting a number (defmacro setTo10(num) ; set the num as 10 and print it (setq num 10)(print num)) ; set a variable x as 25 (setq x 25) ; print the variable (print x) ; call the macro (setTo10 x)
輸出
單擊“執行”按鈕或鍵入 Ctrl+E 時,LISP 會立即執行它,並返回以下結果:
25 10
示例 - 帶有多個引數的宏
讓我們編寫另一個名為 setValue 的宏,它將接收兩個引數並將它們更新為新值。
建立一個名為 main.lisp 的新原始碼檔案,並在其中鍵入以下程式碼。
main.lisp
; define a new macro accepting three values (defmacro setValue(num1 num2 value) (progn ; assign value to num1 (setq num1 value) ; assing value to num2 (setq num2 value)) ; print num1 and num2 (print num1) (print num2) ) ; define paramters (defparameter num1 1) (defparameter num2 2) ; print the paramters before macroo (print "Values: ") (print num1) (print num2) ; print parameters in macros (print "Values within macro: ") (setValue num1 num2 3) ; print parameters after running macro, values will be unaffected (print "Values after macro: ") (print num1) (print num2)
輸出
單擊“執行”按鈕或鍵入 Ctrl+E 時,LISP 會立即執行它,並返回以下結果:
"Values: " 1 2 "Values within macro: " 3 3 "Values after macro: " 1 2
廣告