看onlisp里有一段代码,用来创建别名的:
(defmacro defsynonym (old-name new-name)
`(defmacro ,new-name (&rest args)
`(, ',old-name ,@args)))
注意到old-name前面是 ,’, 这个我完全无法理解是个什么意思啊?
我用
(pp (macroexpand-1 '(defsynonym old-fn new-fn)))
得到的结果是这样的
(defmacro new-fn
(&rest args)
`(,'old-fn ,@args))
貌似前面的=,‘= 保持不变,而=,old-name= 替换成了实际的值了。
然后我想这这个结果有点奇怪啊,实际上只要扩展为
(defmacro new-fn
(&rest args)
`(old-fn ,@args))
就可以了嘛,所以我修改了一下defsynonym的定义,变成了
(defmacro defsynonym (old-name new-name)
`(defmacro ,new-name (&rest args)
`(,old-name ,@args)))
然后很神奇的发现,
(pp (macroexpand-1 '(defsynonym old-fn new-fn)))
的扩展结果变成了
(defmacro new-fn
(&rest args)
`(,old-name ,@args))
这里=,old-name= 并没有被替换为实际的值。
我现在觉得凌乱了:scream:,完全不知道这个规律是怎么样的呀~~~求高手指点