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