2016-04-03 7 views
0

私は要素が大文字であるかどうかをチェックしようとしていますが、私はいくつかのエラーにスキーム大文字コントロール

(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)) 

エラーが生じています。文字の

+0

リスト内の少なくとも1つの要素が大文字であるか、_all_要素が大文字であるかを確認しますか? –

答えて

0

あなたのリスト、事前に「

感謝を指定されたcharを期待?: チャー小文字は、実際にはシンボルのリスト(および数)です。文字数は、彼らの前に#\で書かれている:

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

機能自体は二つの問題があるようです。 1)ifの最初の要素は、最初の要素が0であるかどうかを確認するのではなく、lst全体がヌルであるかどうかを調べる必要があります。 2)内部ifの述語としてchar-upper-case?を使用する必要があります。あなたは3本の枝を持っているので

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

、ネストされたifの代わりにcondを使用することが明確になります。

(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

ありがとう、本当に:) –