我试图检查一个元素是否大写,但是我有一些错误。
(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 -小写?:期望一个字符,给定'a‘
提前感谢
发布于 2016-04-03 12:10:20
您的字符列表实际上是一个符号列表(和一个数字)。字符是在前面用#\编写的:
;; 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?中使用char-upper-case?作为谓词。
(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))
;=> #thttps://stackoverflow.com/questions/36384864
复制相似问题