Lisp中如何给符号序列的每个元素添加指定前缀?
问题错误点排查
concatenate函数的第一个参数要求是序列类型说明符(例如'string、'list),你传入'pfx:属于语法错误,函数无法识别目标生成的序列类型- Common Lisp中符号无法直接拼接,需要先把原有符号转为字符串,和前缀内容拼接完成后,再转换回符号类型
基础实现方案
如果你只需要生成前缀和原符号名称拼接的新符号,不需要真实归属到pfx包,可用以下代码:
(mapcar (lambda (arg) (intern (concatenate 'string "PFX:" (symbol-name arg)))) '(A B C))
运行后即可得到输出(PFX:A PFX:B PFX:C),和你的预期效果一致。
带真实包前缀的实现方案
如果你需要生成的pfx:A是真实归属pfx包的导出符号,可提前创建对应包后用如下代码实现:
;; 初始化pfx包(仅需执行一次) (make-package "PFX" :use nil) (mapcar (lambda (arg) (let ((sym (intern (symbol-name arg) "PFX"))) (export sym "PFX") sym)) '(A B C))
内容的提问来源于stack exchange,提问作者Dan
相关产品推荐
相关产品推荐

