2016-10-24 5 views
0

Das Fenster sagt, es ist ein Fehler auf dem letzten Teil, wo es heißt (...(count-even-strings (rest alist)))
sagen, dass es auf Extrateil gefunden, aber ich weiß nur nicht, wie es zu beheben.Syntax Fehler in Dr. Racket

;; consumes a list of strings, list, and produces the number of strings in list that have an even length 

(define (count-even-strings alist) 
    (cond 
    [(empty? alist) 0] 
    [else (+ (cond [(even? (string-length (first alist))) true]) 1)] 
[else 0]) (count-even-strings (rest alist))) 

Antwort

0

mit einem Editor, der wie DrRacket richtig den Code richtet, können Sie sehen, dass Ihre Funktion hat die folgende Struktur:

(define (count-even-string1s alist) 
    (cond 
    [(empty? alist) 0] 
    [else (+ (cond [(even? (string-length (first alist))) true]) 
      1)] 
    [else 0]) 
    (count-even-strings1 (rest alist))) 

und hat zwei else innerhalb derselben cond, was nicht korrekt ist sintaktisch, während der letzte Teil außerhalb der cond ist.

eine korrekte Lösung mit der Verwendung von if ist die folgende:

(define (count-even-strings alist) 
    (if (empty? alist) 
     0 
     (+ (if (even? (string-length (first alist))) 
      1 
      0) 
     (count-even-strings (rest alist))))) 

(count-even-strings '("a" "ab" "c"")) ;; => 2 

oder unter Verwendung einer einzigen Bedingung:

(define (count-even-strings alist) 
    (cond ((empty? alist) 0) 
     ((even? (string-length (first alist))) (+ 1 (count-even-strings (rest alist)))) 
     (else (count-even-strings (rest alist)))))