你的角色的列表炭火小寫?:期待一個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
只是要確定:你想檢查列表中是否至少有一個元素是大寫字母,或者_all_元素是否爲大寫字符? –