Common Lisp中是否存在通用的符号别名定义方法?
在Common Lisp中创建符号通用别名的方法
Common Lisp里,符号用于将名称绑定到函数、变量、宏等各类实体。我目前在使用Parenscript(一种编译为JavaScript的DSL),它提供CREATE函数来创建JavaScript对象字面量,示例如下:
(parenscript:ps (parenscript:create foo "bar")) ;; => "{ foo : 'bar' };"
即便导入CREATE符号以省略PARENSCRIPT:前缀,写法仍比JavaScript的{foo: "bar"}繁琐,需要写成(create foo "bar")。因此我想在自己的包中为CREATE创建更短的别名,但Common Lisp似乎没有直接实现的方式。例如我尝试使用符号宏但未成功:
(define-symbol-macro c parenscript:create) (parenscript:ps (c foo "bar")) ;; => "c(foo, 'bar');"
这段代码并未生成预期的JavaScript对象,反而将(c foo "bar")解析成了函数调用。Parenscript本身提供了对应的解决方案,使用以下代码可以实现需求:
(parenscript:defpsmacro c (&rest args) `(parenscript:create ,@args))
但该方案依赖Parenscript提供的DEFPSMACRO工具。我想咨询的核心问题是:是否存在通用方法在Lisp中定义与另一符号完全等价的符号?例如在我的包中使用C时,完全等价于PARENSCRIPT:CREATE,且无需关心该符号绑定的是函数、宏、变量还是其他实体。Lisp是否内置此类工具?若没有,能否在不修改实现的前提下自行构建?
内容的提问来源于stack exchange,提问作者Dan Passaro
相关产品推荐
相关产品推荐

