2016-04-03 20 views
0

Ben bir unsur büyük olup olmadığını kontrol etmek için çalışıyorum, ama bazı hatalarıŞema UpperCase Kontrol

(define (isUpper lst) 
    (if (null? (car lst)) 
    #f 
    (if (char-lower-case? (car lst)) #t 
      (isUpper (cdr lst))) 
)) 
(isUpper '(a s f t r 5 q)) 

Hata yaşıyorum; karakter

+0

Sadece emin olmak için: Bir listedeki bir elemanın least_ eğer _at denetlemek istediğiniz bir büyük harf yapmak veya her eleman harf karakterleri ise ne olur? –

cevap

0

Listeniz önceden 'bir

Teşekkür verilen bir char bekliyor ?: odun kömüründe küçük harf, aslında sembollerin bir listesi (ve bir sayı)' dir. Karakter önlerinde #\ ile yazılır:

;; In Lisps the custom is to use dashes between words instead of camelCase 
(is-upper '(#\a #\s #\f #\t #\r #\5 #\q)) 

fonksiyon kendisi iki sorun var gibi görünüyor. 1) İlk elemanın olup olmadığını kontrol etmek yerine, ilk if, tüm lst'un boş olup olmadığını kontrol etmelidir. 2) İç if'daki yüklem olarak char-upper-case?'u kullanmalısınız. Eğer üç şubeleri var yana

(define (is-upper lst) 
    (if (null? lst) 
     #f 
     (if (char-upper-case? (car lst)) 
      #t 
      (is-upper (cdr lst))))) 

, iç içe geçmiş if yerine cond kullanmak daha net olacaktır.

(define (is-upper lst) 
    (cond 
    ((null? lst) #f) 
    ((char-upper-case? (car lst)) #t) 
    (else (is-upper (cdr lst))))) 

(is-upper '(#\a #\b #\c)) 
;=> #f 
(is-upper '(#\a #\B #\c)) 
;=> #t 
+0

Teşekkür ederim, gerçekten :) –