2016-04-13 2 views
0

Ich bin neu bei Schema und an dieser Stelle .. Ich unterbreche mit dieser Frage. bitte geben Sie mir eine Möglichkeit, eine Schema-Funktion zu schreiben, um zu berechnen, wie viele Werte ungleich Null in einer Liste von Zahlen vorhanden sind.Zählen von Werten ungleich null aus einer Liste mit Schema

(nicht null '(4 1 0 2 0 1 3)) - 5

Antwort

0

Sie haben drei Fälle betrachten:

(define (non-zero numbers) 
    (cond ((null? numbers) 0)    ; is the list empty? return zero 
     ((not (= (car numbers) 0))  ; is the current element non-zero? 
     (+ 1 (non-zero (cdr numbers)))) ; add 1 to the counter and recur 
     (else       ; otherwise 
     (non-zero (cdr numbers)))))  ; skip to the next element 

Oder wenn Ihr Dolmetscher unterstützt wird, eine idiomatische Lösung wäre, Prozeduren höherer Ordnung zu verwenden:

(define (non-zero numbers) 
    (count (lambda (n) (not (zero? n))) 
     numbers)) 

In beiden Fällen , es funktioniert wie erwartet:

(non-zero '(4 1 0 2 0 1 3)) 
=> 5 
+0

yeahh .. Es tat das :) danke –

-1

Ich bin nicht vertraut mit Schema überhaupt. Dies kann jedoch leicht durch Rekursion implementiert werden. Stellen Sie sich eine Liste vor [0,1,2,2,0,1]. Sie müssten die Liste durchgehen, jedes Element der Reihe nach betrachten und jedes Mal, wenn Sie eine 0 in der Liste finden, einen Zähler um eins erhöhen.

(define (count_zeroes numbers) 
    (if (null? numbers) 0 
     (+ 1 (count_zeroes (cdr numbers)))) 
+0

ja Danke .. Aber hier, wo wir den Zustand überprüfen, der das Atom ist, ist ein Wert ungleich Null? (Um zu überprüfen, dass wir als Null verwenden wir (= 0 (Autonummern))), deshalb habe ich verwirrt, Wie wir überprüfen, das Atom ist nicht Null? –