2016-04-03 46 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

只是要確定:你想檢查列表中是否至少有一個元素是大寫字母,或者_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應檢查整個lst是否爲空,而不是檢查第一個元素是否爲空。 2)您應該使用char-upper-case?作爲內部if中的謂詞。

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

既然你有三個分支,這將是更清晰的使用cond代替嵌套if

(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

謝謝,真的:) –