scheme macro vs common lisp macro
2014-08-18 15:22
204 查看
common lisp的let宏定义如下
scheme的let宏定义如下
scheme的let*宏如下
那一堆的使用@来解构真的是没有必要的,看看shceme是如何处理的,根本没有必要先包裹然后解构啊。
(defmacro our-left (binds &body body) `((lambda ,(mapcar #'(lambda (x) (if (consp x) (car x) x)) binds) ,@body) ,@(mapcar #'(lambda (x) (if (consp x) (cadr x) nil)) binds))) ;;;;;;;;;;;;;;;;;;;;;test;;;; (our-left ((x 1) (y 2)) (+ x y)) 展开之后变成 =>((lambda (x y) (+ x y) 1 2) 这里我们不难看出其实let不过是lambda的语法糖:)
scheme的let宏定义如下
(defien-syntax let (syntax-rules () ((_ ((x v) ...) e1 e2 ...) ((lambda (x ...) e1 e2 ...) v ...)))) scheme的比上面的那个优雅,直观吧,我们能不费力气的看出这个let内部是如何工作的。
scheme的let*宏如下
(define-syntax my-let* (syntax-rules () ((_ ((p v)) b ...) (let ((p v)) b ...)) ((_ ((p1 v1) (p2 v2) ...) b ...) (let ((p1 v1)) (my-let* ((p2 v2) ...) b ...))))) 其实scheme的宏是一种模式匹配,所以事先一定要把所有的情况的考虑清楚。
那一堆的使用@来解构真的是没有必要的,看看shceme是如何处理的,根本没有必要先包裹然后解构啊。
相关文章推荐
- a useful macro when writing webpage with common lisp
- ANSI Common Lisp译本笔记4
- ANSI Common Lisp 第二章答案
- macro Vs inline
- ANSI Common Lisp 笔记三(数组)
- ANSI Common Lisp 笔记四(结构)
- ANSI Common Lisp 笔记五(哈希表)
- 小语种介绍:LISP/Scheme
- Error: Cannot Determine the location of the VS common tools folder
- when to use define macro vs generate
- Gnu Common Lisp for Microsoft Windows http://www.cs.utexas.edu/users/novak/gclwin.html
- ANSI Common Lisp译本笔记3
- ANSI Common Lisp译本笔记6
- 几个免费的Scheme(Lisp)解释器
- ANSI Common Lisp 笔记三(字符与字串)
- OpenCascade Tcl vs. ACIS Scheme
- cannot determine the location of the vs common tools folder
- .NET语言三剑客:IronScheme, IronLisp和Xacc
- ANSI Common Lisp译本笔记8
- vs2012 无法使用命令行提示符?ERROR: Cannot determine the location of the VS Common Tools folder.