2013-04-16 1 views
0

목록에있는 두 항목을 하나의 항목으로 결합하는 데 문제가 있습니다. 예를 들어Common Lisp (Clisp)의 목록 항목 결합하기

이 달성 할 수있는 방법에

'(Ben Hofferber) => '(Ben_Hofferber) or '(Ben-Hofferber) 

어떤 아이디어?

인쇄 기능을 사용하여 성공을 거두려 고 노력하고 있습니다. 이러한 항목을 결합하여 분리하여 a 목록의 키로 사용할 수있게해야합니다.

+0

목록의 요소가 될 수있는 내용과 "결합"의 의미를 지정해야합니다. 예를 들어, 서로 다른 패키지의 두 기호를 결합하는 방법은 무엇입니까? – sds

+0

기본적으로 목록의 두 요소의 데이터를 하나의 요소에 결합하려고합니다. 그래서 '(Ben Hofferber)에서'(Ben_Hofferber)까지 cdr은 Hofferber 대신에 nil을 리턴 할 것입니다. – Hoffination

+0

당신은 내 질문에 대답하지 않았다 : 기호 cl : 자동차와 기호 cl-user :: Ben을 어떻게 결합하고 싶습니까? – sds

답변

0

목록을 알리 스트 키로 사용할 수도 있습니다. 예,

(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) 

그러나 ifi 기호를 하나에 결합하는 방법에 대해 설명하고 싶습니다.

(defun combine-symbols (s1 s2) 
    (intern (concatenate 'string (symbol-name s1) "-" (symbol-name s2)) 
      (symbol-package s1))) 

을하지만, 서로 다른 패키지 (예를 들어, cl:carcl-user::ben)에있는 경우, 당신은을해야 할 것 :

모두 기호는 동일한 패키지에있는 경우, 결합 된 기호는 너무 거기에 배치 할 수 있습니다 함께 가기에 힘든 선택.

또는, 문자열을 가서

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

assoc:test #'equal 또는 :test #'string=을 통과하는 것을 잊지 마세요 사용할 수 있습니다.