- 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
广告