如何在Scheme Racket中找到小写字母的数量?

时间:2016-03-30 09:29:15

标签: scheme racket uppercase lowercase

我正在尝试查找字符串中的大写/小写字母数,但我的代码存在问题:

(define case
  (lambda (list)
    (if(char-lower-case? (car list))
       (case (cdr list))
       (+ 1 (case (cdr list)))
       )
    ))

(case (string->list "ScheMe"))

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

在你的功能中你有两个问题:

  1. case是racket / scheme

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

  4. 此外,您使用参数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上执行了cdrnil,因此会收到错误。

其他可能出错的事情:

您的标题表示您要计算小写字母,但每个大写字母都会增加。

listcase是标准库中的名称。对于R5RS,它意味着未定义的行为,对于R6RS,以后它意味着库绑定将不可用。在#!racket(我猜您使用此语言,因为您标记了球拍),它可以作为R6RS使用。