我们定义这样的结构
(defstruct point
x
y)
然后我们得到一个函数point-p
定义宏
似乎很容易(defmacro mac (fun-name)
`(defun ,fun-name ()
t))
但是如何在fun-name
上添加“-p”作为后缀?
我认为它可能类似于
(defmacro mac (fun-name)
`(defun ,(suffix ,fun-name) ()
t))
suffix
可能是一个功能。
那么我实际上可以实现这个呢?
答案 0 :(得分:5)
您只需使用string
从符号中创建一个字符串即可。做任何你喜欢的事情和intern
它来获得一个可以用作标识符的实习符号。
(defun suffix (symbol suffix)
(intern (concatenate 'string (string symbol) (string suffix))))
(defmacro make-predicate (fun-name)
`(defun ,(suffix fun-name '#:-p) ()
t))
(make-predicate test)
(test-p) ; ==> t
注意:当你在一个已经没有引用的表达式中使用逗号(unquote)时,宏中有一个错误。