我正在尝试检查元素是否为大写,但我有一些错误
(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))
错误; char-lower-case ?:期待一个char,给出' a
提前致谢
答案 0 :(得分:0)
您的字符列表实际上是符号列表(和数字)。 Chars用#\
写在他们面前:
;; 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