0

这样的事情存在吗?这似乎是一个基本功能,但我找不到类似的东西。

4

3 回答 3

3
(defun concatoms (a b)
  (intern (concatenate 'string (symbol-name a) (symbol-name b))))
于 2012-08-11T03:21:40.597 回答
3

Onlisp(第 57 页,第 4.7 节,符号和字符串)有一个更通用的解决方案:

(defun mkstr (&rest args)
  (with-output-to-string (s)
    (dolist (a args) (princ a s))))

(defun symb (&rest args)
  (values (intern (apply #'mkstr args))))

使用symb您可以连接字符串、符号、数字等。

于 2012-08-11T07:51:43.050 回答
0

您要做的是生成新符号。您可以使用intern或使用make-symbol(取决于您是否需要符号)来执行此操作。但是,这也是一个信号,表明您正在做一些需要更多思考的事情,从其他符号的符号名称的连接中生成符号很少是最好的事情。

如果您绝对需要创建新符号,则应该这样做:

(defun concatenate-symbols (a b &optional (package *package*))
  (intern (concatenate 'string (symbol-name a) (symbol-name b)) package))
于 2012-08-11T06:21:38.207 回答