2016-03-30 11 views
0

Ich versuche, die Zahl der Klein-/Großbuchstaben in einer Zeichenfolge zu finden, aber es gibt ein Problem mit meinem Code:Wie finde ich die Anzahl der Kleinbuchstaben in Schema Racket?

(define case 
    (lambda (list) 
    (if(char-lower-case? (car list)) 
     (case (cdr list)) 
     (+ 1 (case (cdr list))) 
     ) 
    )) 

(case (string->list "ScheMe")) 

Wie kann ich dieses Problem lösen?

+0

Bitte spezifizieren Sie, was genau das Problem mit Ihrem Code ist. – honk

+0

Wenn der erste Buchstabe in der Zeichenfolge in Kleinbuchstaben geschrieben ist, gibt das Programm die (case (cdr-Liste)) nicht zurück. Ich überprüfe nicht die ganze Zeichenfolge. – Ersin

+0

I gelöst, die Lösung ist:? (Fall (Lambda (Liste) (if (null Liste) (if (char-Großbuchstaben (Auto Liste)) (Fall (cdr Liste)) definieren (+ 1 (case (cdr liste)))) ) ))) (case (string-> list "SeheMe")) – Ersin

Antwort

0

In Ihrer Funktion haben Sie zwei Probleme:

  1. case ist ein vordefinierter Operator in Schläger/Schema

  2. Sie nicht für eine leere Liste testen.

Darüber hinaus verwenden Sie den Parameter list, die ein primitiver Operator und nicht als Variablennamen verwendet werden soll.

Hier ist eine Arbeitsfunktion:

(define (case1 lst) 
    (cond ((null? lst) 0) 
      ((char-lower-case? (car lst)) (case1 (cdr lst))) 
      (else (+ 1 (case1 (cdr lst)))))) 

(case1 (string->list "ScheMe")) 
0

Ihr Code fehlt ein Basisfall. (case '()) sollte zu 0 auswerten, aber Sie erhalten einen Fehler, da Sie car und cdr auf nil tun.

Andere Dinge, die falsch sein könnte:

Ihr Titel zeigt an, dass Sie Kleinbuchstaben zählen wollen, aber Sie für jede Groß erhöhen.

list und case sind Namen aus der Standardbibliothek. Für R5RS bedeutet dies undefiniertes Verhalten und für R6RS und später bedeutet dies, dass die Bibliotheksbindungen nicht verfügbar sind. In #!racket (ich denke, Sie verwenden diese Sprache seit Sie getaggt Racket) funktioniert es als R6RS.

Verwandte Themen