2009-11-22 2 views
3

리스트의 모든 요소에 x를 추가하려고합니다. 예를 들어 :Common Lisp : x를리스트에 재귀 적으로 붙이십시오.

(queue 3 '(1 2 3)) 

((3 1) (3 2) (3 3)) 

아래의 코드는 분명히 내가하고 싶은 일을하지 않습니다 줄 것이다. 힌트를주세요.

(defun queue(x y) 
(cond 
    ((null y) nil) 
    (t (cons x (queue x (rest y)))))) 
+0

추가 LISP 키워드 : 여기

는 mapcar 등등을 사용하여 일반적인 리스프 방법입니다. – hallski

+1

아마도 ((3 1) (3 2) (3 3))을 원할 것입니다. 목록을 나타내는 추가 된 괄호에 유의하십시오. –

답변

3

y의 첫 번째 요소를 사용하지 않고 나머지 y에 큐를 적용한 결과에 x를 추가합니다. 그래서 기본적으로 y의 모든 값을 버리고 x로 대체합니다.

대신 (cons (list x (first y)) (queue x (rest y))))))을 원하십니까?

물론지도를 사용하여이 작업을 수행 할 수 있지만이 작업은 재귀의 연습이라고 가정합니다.

+0

완벽! 그리고 그 설명은 꽤 기술적이었습니다. 감사! – qwerty

3

이미 재귀 버전에 대한 답변을 얻었습니다.

(defun queue (item list) 
    (mapcar (lambda (list-element) 
       (list item list-element)) 
      list))