如何在 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"))

我该如何解决这个问题?

在你的函数中你有两个问题:

  1. case 是 racket/scheme

  2. 中的预定义运算符
  3. 您不测试空列表。

此外,您使用了参数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.

上做 carcdr

其他可能出错的地方:

你的标题表明你想计算小写字母,但你增加了每个大写字母。

listcase 是标准库中的名称。对于 R5RS,这意味着未定义的行为,对于 R6RS 和更高版本,这意味着库绑定将不可用。在 #!racket 中(我猜你使用这种语言是因为你标记了球拍)它作为 R6RS 工作。