...) 八. 宏
- MIT-Scheme的宏定义:
(define-syntax 宏名
(syntax-rules()
((模板) 操作))
. . . )) - 在操作时,先用let绑定参数,然后用lambda定义过程:
(let ((本地操作 (lambda 参数 宏主体 ...)))
(lambda (e r)
(apply 本地操作 (cdr e)))) (define-syntax start
(syntax-rules ()
((start exp1)
exp1)
((start exp1 exp2 ...)
(let ((temp exp1)) (start exp2 ...))) ))
- 实现的短小的定义:
(define-macro MACRO-NAME
(lambda MACRO-ARGS
MACRO-BODY ...))
- 结构模板定义:(defstruct 结构名 属性(不构成list))
- 新建结构:(make-结构名 属性符号 值 符号 值)
(make-tree ’height 30
’leaf-shape ’frond
’age 5))
- 使用结构:(结构名.属性名 结构对象);返回属性值,(set!结构名.属性名 结构对象 新属性值);更改属性值
(set!tree.height coconut 40)
(tree.height coconut) => 40
- defstruct本身未提供,需要宏来定义,具体不再写出。
- Scheme标准默认未提供!我看也用不着。