2017-04-25 1 views
0

Der Zweck der Funktion ist es, das Auftreten von 12 in einer Liste mit Lisp zu zählen.Lisp-Funktion, die 1 2 Vorkommen in einer Liste zählt

Der Code, den ich schrieb:

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

Es Fehler erzeugen, wenn ich es verwenden:

Fehler (n), Warnung (e): *** - = : NIL ist keine Nummer

Beachten Sie, dass ich Lisp Online-Compiler verwenden: rextester.

Danke für Ihre Hilfe & Führung

+1

was ist, wenn die Liste 1 Element ist? dann vergleichst du 2 mit null – jenesaisquoi

+0

Ja, ich habe die Bedingung mit der Nullbedingung hinzugefügt. Ich danke dir sehr. –

Antwort

0

Wenn Sie das letzte Element der Liste erreichen, werden Sie 2 und nil (die cadr von nil ist nil) werden verglichen.

Sie für Singleton Listen testen müssen: long

(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

Vielen Dank. –

Verwandte Themen