use*_*377 4 macros common-lisp
我们这样定义一个结构
(defstruct point
x
y)
Run Code Online (Sandbox Code Playgroud)
然后我们得到一个功能 point-p
定义一个宏似乎很容易
(defmacro mac (fun-name)
`(defun ,fun-name ()
t))
Run Code Online (Sandbox Code Playgroud)
但是如何添加"-p"作为后缀fun-name呢?我想它可能是这样的
(defmacro mac (fun-name)
`(defun ,(suffix ,fun-name) ()
t))
Run Code Online (Sandbox Code Playgroud)
suffix可能是一个功能.那么我实际上可以实现这个呢?
您只需使用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
Run Code Online (Sandbox Code Playgroud)
注意:当您在已经不带引号的表达式中使用逗号(unquote)时,宏中出现错误.