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组合?