2011-03-31 4 views
2

저는 구성표를 새로 배우는 사람입니다. 나는 다음 두리스트의 차이점에 대해서 혼란 스러울 뿐이다. 구성표의 두 목록의 차이점은 무엇입니까

(define a '(1 2)) 
(define a '(1 . 2)) 

나는 A와 B와 동일한 생각하지만, 나에게

(equal? a b) 

반환 #F. 도움이 될 것입니다.

답변

4

둘은 동일하지 않습니다. 첫 번째는 정상적인 목록입니다. cons 셀의 car

(1 . (2 . nil)) 

정상적인 목록 데이터를 저장하고, cdr은 목록에있는 다음 cons 셀에 포인터를 저장하는 데 사용, 또는 무기 호입니다 : 점 표기법은 다음과 같을 것 목록의 마지막 셀

a 귀하의 정의는 cdr에서 car21으로, 하나의 cons 셀을 사용합니다. 당신이 그래픽으로 그들을 그린 경우

, 그들은 다음과 같이 것 : 그들은 같은 데이터 유형이 아니기 때문에

enter image description here

+0

확실한 그래프를 보내 주셔서 감사합니다. – lujb

1

"도트"표기법은 표준 목록 데이터 정의를 따르지 않는 "부적절한 목록"을 설명하기 위해 Scheme 및 LISP에서 사용됩니다. 이 질문 :

Functional Programming: what is an "improper list"?

은 ... 아마 대부분의 질문에 대답을 제공합니다. 이 게시물에 답변이 없으면 알려주세요.

행운을 빈다.

+0

대단히 감사합니다. 나는 fp의 또 다른 개념을 알았습니다. – lujb

0

그들은 동일한 반환하지 않습니다. 첫 번째 것 : (define a '(1 . 2))은 한 쌍으로 알려져 있습니다. 목록은 쌍이지만 모든 쌍이 목록은 아닙니다. 목록은 car이고 그 목록은 cdr 인 목록입니다. 점 표기법을 사용하면 해당 쌍의 car이 1이고 cdr이 2라는 것을 의미합니다. 이들은 동일한 데이터 유형이 아니기 때문에 같을 수 없습니다.

관련 문제