October 1, 2006

Scheme学习笔记(五)

(这应当是最后一篇了,明天来继续数组左旋...

八. 宏
  • 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))
(defstruct tree height girth age leaf-shape leaf-color)
  • 新建结构:(make-结构名 属性符号 值 符号 值)
(define coconut
(make-tree ’height 30

’leaf-shape ’frond
’age 5))
  • 使用结构:(结构名.属性名 结构对象);返回属性值,(set!结构名.属性名 结构对象 新属性值);更改属性值
(tree.leaf-shape coconut) => frond
(set!tree.height coconut 40)
(tree.height coconut) => 40
  • defstruct本身未提供,需要宏来定义,具体不再写出。
十. 面向对象
  • Scheme标准默认未提供!我看也用不着。
祝所有Sceme的爱好者们早日摆脱无聊和世俗的coder世界!

No comments: