首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >创建关键字符号

创建关键字符号
EN

Stack Overflow用户
提问于 2014-11-19 13:49:24
回答 1查看 810关注 0票数 1

我正在尝试创建一个宏,该宏接受一些关键字参数,并且只有在定义了参数的情况下,才会将条目添加到列表中。把下面的代码分开,可以说明我需要什么。

代码语言:javascript
运行
复制
(defun add-if-not-null (var lst)
  (if (not (null var))
      (append (cons (***) (cons ver '())) lst)))

三个星号显示了我想弄清楚的部分。这基本上是一个符号名,并将其转换为关键字表示形式。例如宽度转换为:宽度

代码语言:javascript
运行
复制
(let ((width 100))
    (add-if-not-null (width '())))

应该回来

代码语言:javascript
运行
复制
(:width 100)

我使用cl-who来创建svg表示,并且只希望将宽度和高度之类的属性指定为包装文档的宏的参数。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-11-19 14:13:18

包的名称是KEYWORD。创建符号(如果必要的话)并使用INTERN将其放入包中。

代码语言:javascript
运行
复制
CL-USER 11 > (intern (symbol-name 'width) "KEYWORD")
:WIDTH

A宏:

代码语言:javascript
运行
复制
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))
T
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27018489

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档