我正在尝试创建一个宏,该宏接受一些关键字参数,并且只有在定义了参数的情况下,才会将条目添加到列表中。把下面的代码分开,可以说明我需要什么。
(defun add-if-not-null (var lst)
(if (not (null var))
(append (cons (***) (cons ver '())) lst)))三个星号显示了我想弄清楚的部分。这基本上是一个符号名,并将其转换为关键字表示形式。例如宽度转换为:宽度
(let ((width 100))
(add-if-not-null (width '())))应该回来
(:width 100)我使用cl-who来创建svg表示,并且只希望将宽度和高度之类的属性指定为包装文档的宏的参数。
发布于 2014-11-19 14:13:18
包的名称是KEYWORD。创建符号(如果必要的话)并使用INTERN将其放入包中。
CL-USER 11 > (intern (symbol-name 'width) "KEYWORD")
:WIDTHA宏:
CL-USER 29 > (defmacro add-if-not-null (var list)
(check-type var symbol)
`(when var
(push (list ,(intern (symbol-name var) "KEYWORD") var)
,list)))
ADD-IF-NOT-NULL
CL-USER 30 > (macroexpand-1 '(add-if-not-null width some-list))
(WHEN VAR (PUSH (LIST :WIDTH VAR) SOME-LIST))
Thttps://stackoverflow.com/questions/27018489
复制相似问题