如何在 Scheme Racket 中找到小写字母的数量?
How do I find the number of lower case letters in Scheme Racket?
我正在尝试查找字符串中 lower/upper 个大小写字母的数量,但我的代码存在问题:
(define case
(lambda (list)
(if(char-lower-case? (car list))
(case (cdr list))
(+ 1 (case (cdr list)))
)
))
(case (string->list "ScheMe"))
我该如何解决这个问题?
在你的函数中你有两个问题:
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"))
您的代码缺少基本案例。 (case '())
应该评估为 0
但是你得到一个错误,因为你在 nil
.
上做 car
和 cdr
其他可能出错的地方:
你的标题表明你想计算小写字母,但你增加了每个大写字母。
list
和 case
是标准库中的名称。对于 R5RS,这意味着未定义的行为,对于 R6RS 和更高版本,这意味着库绑定将不可用。在 #!racket
中(我猜你使用这种语言是因为你标记了球拍)它作为 R6RS 工作。
我正在尝试查找字符串中 lower/upper 个大小写字母的数量,但我的代码存在问题:
(define case
(lambda (list)
(if(char-lower-case? (car list))
(case (cdr list))
(+ 1 (case (cdr list)))
)
))
(case (string->list "ScheMe"))
我该如何解决这个问题?
在你的函数中你有两个问题:
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"))
您的代码缺少基本案例。 (case '())
应该评估为 0
但是你得到一个错误,因为你在 nil
.
car
和 cdr
其他可能出错的地方:
你的标题表明你想计算小写字母,但你增加了每个大写字母。
list
和 case
是标准库中的名称。对于 R5RS,这意味着未定义的行为,对于 R6RS 和更高版本,这意味着库绑定将不可用。在 #!racket
中(我猜你使用这种语言是因为你标记了球拍)它作为 R6RS 工作。