lisp cons 문의

dyjin의 이미지

안녕하세요 lisp 독학중인데 아래 두 car결과가 예상과 달라서 문의드립니다
결과가 다른간 당연한데
위에건 (nil nil a b) 고
아래건 (nil (a b)) 로 리스트가 포함되는 원리가 궁금합니다
왜그런가요?

(setq test '(a b))
(cons () (cons () test))
(cons () (cons test ()))

ㅇ의 이미지

'()

...!의 이미지

; quote 개념
(1 2) => error
'(1 2) => (1 2)
(cons 1 (cons 2 ())) => (1 2)
(equal (cons 1 (cons 2 ())) '(1 2)) => T

(cons 2 '(1)) => (2 1) ; 리스트 (1) 에 2 를 추가함.
(cons () '(1)) => (nil 1) ; 리스트 (1) 에 nil 을 추가함.
(cons 1 ()) => (1) ; 1 을 가지고 리스트를 만듦. 즉 생성된 리스트의 유일한 원소가 1 임.
(cons '(1) ()) => ((1)) ; 리스트 (1)을 가지고 리스트를 만듦. 즉 생성된 리스트의 유일한 원소가 리스트 (1) 임.

(cons () '(1 2)) 
 => (cons () (cons 1 (cons 2 ()))) 
 => (cons () (cons 1 (2)))
 => (cons () (1 2))
 => (nil 1 2)

(cons '(1 2) ()) 
 => (cons (cons 1 (cons 2 ())) ()) 
 => (cons (cons 1 (2)) ())
 => (cons (1 2) ()) ; 앞서 설명했듯이 리스트의 리스트를 만듦.
 => ((1 2))

개념적인 term replacing 이어서 => 이후에 나오는 리스트는 읽기 편하게 ' 없이 썼습니다. 질문하신 예에 적용하는 것은 쉽게 하실 수 있으리라 믿습니다.