先看代码:
1
(defmacro let1 (var val &body body)
`(let ((,var ,val))
,@body)
定义一个宏。
2
(print (let1 foo (+ 2 3)
(* foo foo)))
使用这个宏。
如果不用到宏,那么效果类似一下代码:
3
(print (let ((foo (+ 2 3)))
(* foo foo)))
查看land of lisp书本中描述, foo 相当于宏中var的代替,(+ 2 3)相当于宏中val的代替,(* foo foo)相当于body的代替。因此这个宏展开后相当于3代码的实现。