0
我无法将列表中的两个项目合并为一个项目。在Common Lisp中合并列表项(Clisp)
例如:
'(Ben Hofferber) => '(Ben_Hofferber) or '(Ben-Hofferber)
如何可以做到这一点任何想法?
我一直在搞打印功能试图让它以没有成功的方式工作。我需要组合和分离这些项目,以便我可以使用它们作为一个列表的关键。
我无法将列表中的两个项目合并为一个项目。在Common Lisp中合并列表项(Clisp)
例如:
'(Ben Hofferber) => '(Ben_Hofferber) or '(Ben-Hofferber)
如何可以做到这一点任何想法?
我一直在搞打印功能试图让它以没有成功的方式工作。我需要组合和分离这些项目,以便我可以使用它们作为一个列表的关键。
您也可以使用列表作为alist键。 例如,
(assoc '(1 2) '(((1 1) a) ((1 2) b) ((1 3) c)) :test #'equal)
==> ((1 2) B)
所以,如果你有一个人
(defparameter *people* '((Ben Hofferber) (Adam Young)))
一个列表,你可以设置他们的年龄是这样的:
(defparameter *ages* (mapcar #'list *people* '(20 11)))
,并发现它们是这样的:
(assoc '(Ben Hofferber) *ages* :test #'equal)
==> ((BEN HOFFERBER) 20)
但是,如果你insi把符号合并成一个,你必须解释你想怎么做。
如果两个符号是在同一个包,组合符号可以放在那里太:
(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
。
您应该指定列表中的元素可能是什么,以及“结合”的含义。例如,你将如何结合来自不同包装的两个符号? – sds
基本上我想将数据从一个列表中的两个元素合并到一个元素中。所以从'(本霍夫弗伯)到'(Ben_Hofferber),cdr将返回零而不是Hofferber。 – Hoffination
您没有回答我的问题:您想如何将符号cl:car与符号cl-user :: Ben结合使用? – sds