음, 연결리스트의 definition 살펴 보자 :
연관리스트의 N. 키와 값의 연관을 나타내는 cons의 목록. 각 cons의 car가 키이고 cdr이 해당 키와 연관된 값인 입니다.
이 alistp
의 가능한 구현 될 것을 감안할 때 :
(defun alistp (alist)
(and (listp alist) ; a list
(every #'consp alist))) ; of conses
지금, 당신의 코드 예제에서 당신은 아마이 직접 구현할 수 있었던 것 말할 수 있지만, 당신은 보인다 마음에있는 알 스트의 다른 정의를 갖기. 내가 본 앨리스스트의 예는 모두 다음과 같이 보입니다 : ((a . x) (b . y))
, 아마도 ((a . x) (b . (y z)))
그러나 마지막 요소로서리스트를 가진 점선 된리스트는 목록 일뿐입니다. 그리고 예제 입력으로부터 당신이 원하는 것은 분명합니다. 목록을 값으로 허용합니다. (왜 어쨌든, 당신이하지 않을까요?)
당신이 실현해야 할 무엇, 나는 가정, 귀하의 예를 입력 ((1 . (4 5 6)))
내가 주로 자신의 값으로 목록으로 alists를 참조하는 방법 인 ((1 4 5 6))
정확히 같은 때문이다 코드에서 사용됩니다. 적어도 필자가 보통 쓰는 방법입니다.
이제는 목록이기는하지만 값도 제외하려는 것입니다. 단지 공백 인 ()
입니다. 따라서 실제로 생각해 보는 정의는 다음과 같습니다.
연관 목록 n. 키와 nil이 아닌 값의 연관을 나타내는 cons 셀 목록. 각 cons의 car가 키이고 cdr이 해당 키와 연관된 값인 입니다. 그건 정말 당신이 원하는 경우
, 새로운 정의를 따르 그런
(defun alistp (alist)
(flet ((true-cdr-p (element)
(and (consp element) ; cons cell
(cdr element)))) ; with non-nil cdr (i.e. value)
(and (listp alist) ; a list
(every #'true-cdr-p alist)))) ; of cons cells with non-nil cdr
또는 무언가를. 위의 간단한 버전을 고집하는 것이 좋습니다.
감사합니다. @danlei. 나는 명백한 무엇인가 놓치고있다라는 것을 알고 있었다. .. 그리고 나는 있었다! –
여러분을 환영합니다! – danlei