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

あなたがしようとしているのは、新しいシンボルを生成することです。これは、withinternまたはwithのいずれかで実行できます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 に答える