Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
List 在公共Lisp(Clisp)中合并列表项_List_Merge_Clisp - Fatal编程技术网

List 在公共Lisp(Clisp)中合并列表项

List 在公共Lisp(Clisp)中合并列表项,list,merge,clisp,List,Merge,Clisp,我无法将列表中的两项合并为一项 例如: '(Ben Hofferber) => '(Ben_Hofferber) or '(Ben-Hofferber) 关于如何实现这一点有什么想法吗 我一直在摆弄打印功能,试图让它以这种方式工作,但没有成功。我需要合并和分离这些项目,以便可以将它们用作a列表的键。您也可以将列表用作列表键。 例如: 所以,如果你有一份名单 (defparameter *people* '((Ben Hofferber) (Adam Young))) 您可以这样设置他们

我无法将列表中的两项合并为一项

例如:

'(Ben Hofferber) => '(Ben_Hofferber) or '(Ben-Hofferber)
关于如何实现这一点有什么想法吗


我一直在摆弄打印功能,试图让它以这种方式工作,但没有成功。我需要合并和分离这些项目,以便可以将它们用作a列表的键。

您也可以将列表用作列表键。 例如:

所以,如果你有一份名单

(defparameter *people* '((Ben Hofferber) (Adam Young)))
您可以这样设置他们的年龄:

(defparameter *ages* (mapcar #'list *people* '(20 11)))
(assoc '(Ben Hofferber) *ages* :test #'equal)
==> ((BEN HOFFERBER) 20)
然后发现他们是这样的:

(defparameter *ages* (mapcar #'list *people* '(20 11)))
(assoc '(Ben Hofferber) *ages* :test #'equal)
==> ((BEN HOFFERBER) 20)
然而,如果你坚持把符号组合成一个符号,你就必须解释你想怎么做

如果两个符号位于同一个包中,则组合符号也可以放置在该包中:

(defun combine-symbols (s1 s2)
  (intern (concatenate 'string (symbol-name s1) "-" (symbol-name s2))
          (symbol-package s1)))
但是,如果它们在不同的软件包中(例如,
cl:car
cl-user::ben
),您将不得不艰难地选择使用哪个软件包

或者,您可以使用字符串并使用

(defun combine-objects (o1 o2)
  (format nil "~A-~A" o1 o2))

不要忘记通过
:test#'equal
:test#'string=
assoc

您应该指定列表中的元素可以是什么,以及“combine”是什么意思。例如,如何组合来自不同软件包的两个符号?基本上,我想将列表中两个元素的数据组合到一个元素中。所以从“(Ben Hofferber)到“(Ben_Hofferber),cdr将返回nil而不是Hofferber。您没有回答我的问题:您希望如何将symbol cl:car与symbol cl user::Ben组合?