2012-06-17 1 views
4

lisp의 목록이 점으로 구분 된 쌍인지 어떻게 확인할 수 있습니까?Lisp - 목록이 점으로 구분 된 쌍인지 어떻게 확인할 수 있습니까?

CL-USER 20 : 3 > (dotted-pair-p (cons 1 2)) 
T 

CL-USER 20 : 3 > (dotted-pair-p '(1 2)) 
NIL 

CL-USER 20 : 3 > (dotted-pair-p '(1 2 3)) 
NIL 

나는 length=2 경우 검사를 시도했지만 오류가 발생했습니다 :이 숙제이기 때문에

(1 .()). 

, 나는 ':

CL-USER 28 : 1 > (= (length (cons 2 3)) 2) 
Error: In a call to LENGTH of (2 . 3), tail 3 is not a LIST. 
+0

모든 적절한 목록은 특정 양식의 점선 쌍입니다. – Marcin

+0

내 대답을보고 둘 사이에 다른 점을 생각해보십시오. '길이'는 빈 목록이 있다고 가정합니다. 그것이 멈추는 방법입니다. – nixeagle

+0

'(= (길이 (cons 2 3) 2))''는 = (length (cons 2 3)) 2)'이어야합니다. – ffriend

답변

9

"점 쌍의 표기법"에있는 LISP 목록과 같이 보입니다 이 결론을 논리적 인 결론으로 ​​가져 가도록하겠습니다. 이 둘 사이의 차이가 무엇

(CONS 1 2) => (1 . 2). 

(LIST 1 2) => (1 . (2 .())) 

비교? 당신은 어떻게 술어를 사용하여 차이를 말할 수 있습니까?

모든 적절한 lisp 목록은 빈 목록으로 끝납니다. 자신에게 자문 해보십시오. 죄수 쌍의 두 번째 요소에 어떻게 접근합니까? 거기에서 나온 해결책은 분명해야합니다.

+0

차이점은 첫 번째 목록에는 끝에 빈 목록이 있고 두 번째 목록에는없는 목록이 있지만 hoe = w는 알 수 있습니까? –

+0

빈리스리스트는 어떻게 표현해야할까요? '(eq '() ??)'채우기 the ?? 물론 당신은 죄수 쌍의 두 번째 요소에 접근해야합니다. 어떤 기능을 가르쳐 왔습니까? 그들을 통해 퍼즐 조각을 함께 넣어. – nixeagle

+0

, 도와 줘서 고마워. –

0
(not(listp(cdr (cons 1 2))))=> T 
(not(listp(cdr (list 1 2))))=> nill 
+3

이 답변은 유용할만한 설명이 필요합니다. 일부를 포함하도록 수정하십시오. – Xan

2

한 쌍하지 않는 동안 목록을 항상 빈리스트로 끝나기 때문에 :

(listp (cdr '(1 2))) => T 
(listp (cdr '(1 . 2))) => NIL 
0
목록 점선으로 (nil이 아닌 원자와 종료)되어있는 경우 확인할 수

:

(defun dotted-listp (l) 
    (cond ((null l) nil) 
     ((atom l) t) 
     (t (dotted-listp (cdr l))))) 
+0

(점선 된리스트 1)은 T –

관련 문제