2013-01-08 2 views
3

Lisp의 신인입니다. 내가 이 표현식이 Common Lisp에서 예상대로 작동하지 않는 이유는 무엇입니까?

(apply #'(lambda (&rest x) (mapcar #'list x)) '((1 2) (3 4))) 

이 같은 결과를 반환 할 것으로 예상

(mapcar #'list '(1 2) '(3 4)) 

'((1 3) (2 4)) 

을 줄 것이라는 점을 알고 작품을 어떻게 적용되는지에 대한 이해를 기반으로. 예상대로

(apply #'append '((1 2) (3 4))) 

나에게

'(1 2 3 4) 

을 제공하기 때문에 대신, 내가

'(((1 2)) ((3 4))) 

얻고 난 혼란 스러워요. 무슨 일 이니?

답변

3

간체 당신이 (3 4) 대신 A 대신 (1 2)B을 사용한다고 가정 &rest x는, 모든 인수를 받아 목록으로 그들을 팩

(apply #'(lambda (&rest x) (mapcar #'list x)) '(A B)) 

때문에 그렇게 x이 값 (A B) 있습니다. 그런 다음 mapcar을 두 번 반복하여 Alist으로 전달하고 (A)을 생성 한 다음 B과 동일하게 수행합니다. 그런 다음 mapcar은 그 목록을 작성하여 ((A) (B))

여기에 인쇄 설명을 넣어 두는 것이 유용합니다.

+0

아! 오케이, 내 오해는 & 휴식이었습니다. 고맙습니다! – user1959408

관련 문제