在生成外来代码时对抗不需要的符号嵌入

问题描述 投票:0回答:1

这可能是一个 XY 问题,所以我将首先描述我的目标:

我想写一个返回未计算的CL代码的函数,类似于宏,只是我不希望他返回的代码被执行,所以像这样:

(defun remote-add (a b)
  `(+ ,a ,b))

我想这样做的原因是因为我正在为另一个 CL 实现生成一个 Lisp 例程。当我有一个包在我当前的 Lisp 环境中不存在,但保证存在于远程 Lisp 中时,就会出现问题:

(defun remote-fast-add (a b)
  `(remote-only:fast-adder ,a ,b)) ;; No package REMOTE-ONLY

我现在规避这个问题的方法是通过在字符串中编写代码,我对此不太高兴。没有命名空间的东西,比如 Emacs Lisp,让这变得更容易。

我能做些什么来真正实现这一目标吗?据我所知,特殊的阅读器宏是唯一的出路。

package common-lisp symbols reader-macro
1个回答
0
投票

您可以创建空的虚拟包,然后将实习生符号放入其中:

;;; Repeat as needed for all the packages the generated code uses
(unless (find-package :remote-only) (make-package :remote-only))
af (defun remote-fast-add (a b)
  (list (intern "FAST-ADDER" :remote-only) a b))

(remote-fast-add 1 2) ; > (REMOTE-ONLY::FAST-ADDER 1 2)
© www.soinside.com 2019 - 2024. All rights reserved.