2017-04-25 6 views
0

이 함수의 목적은 lisp을 사용하여 목록에서 12 개의 항목을 계산하는 것입니다.목록에 1 2 개의 숫자가 나타나는 Lisp 함수

코드는 내가 쓴 :

(defun count12 (x) 
    (if (null x) 0 
     (if (and (= 1 (car x)) (= 2 (cadr x))) 
      (+ 1 (count12 (cdr x))) 
      (+ 0 (count12 (cdr x))) 
     ) 
    ) 
) 

내가 그것을 사용할 때이 오류가 발생합니다 : 경고,

오류 (들) (들) : *** - = : NIL은 숫자가 아닙니다

저는 Lisp 온라인 컴파일러를 사용하고 있습니다 : rextester. 이리스트의 마지막 요소에 도달하면

당신의 도움이 & 가이드

+1

어떤 경우? 그런 다음 2를 0과 비교하십시오. – jenesaisquoi

+0

예 널 조건이있는 조건을 추가했습니다. 정말 고맙습니다. –

답변

0

주셔서 감사합니다, 당신은 2nil합니다 (nilcadr입니다 nil)를 비교됩니다.

당신은 싱글 목록에 대한 테스트해야

: 목록 1 개 요소가 긴

(defun count12 (x) 
    (if (or (null x) (null (cdr x))) 
     0 
     (if (and (= 1 (car x)) (= 2 (cadr x))) 
      (+ 1 (count12 (cdr x))) 
      (+ 0 (count12 (cdr x)))))) 
+0

정말 고마워요. –