我正在尝试查找字符串中的大写/小写字母数,但我的代码存在问题:
(define case
(lambda (list)
(if(char-lower-case? (car list))
(case (cdr list))
(+ 1 (case (cdr list)))
)
))
(case (string->list "ScheMe"))
我该如何解决这个问题?
答案 0 :(得分:0)
在你的功能中你有两个问题:
case
是racket / scheme
您不测试空列表。
此外,您使用参数list
,它是一个原始运算符,不应该用作变量名。
这是一个有效的功能:
(define (case1 lst)
(cond ((null? lst) 0)
((char-lower-case? (car lst)) (case1 (cdr lst)))
(else (+ 1 (case1 (cdr lst))))))
(case1 (string->list "ScheMe"))
答案 1 :(得分:0)
您的代码缺少基本情况。 (case '())
应评估为0
,但由于您在car
上执行了cdr
和nil
,因此会收到错误。
其他可能出错的事情:
您的标题表示您要计算小写字母,但每个大写字母都会增加。
list
和case
是标准库中的名称。对于R5RS,它意味着未定义的行为,对于R6RS,以后它意味着库绑定将不可用。在#!racket
(我猜您使用此语言,因为您标记了球拍),它可以作为R6RS使用。