Scheme UpperCase Control

时间:2016-04-03 11:31:20

标签: scheme

我正在尝试检查元素是否为大写,但我有一些错误

(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

提前致谢

1 个答案:

答案 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
相关问题