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

如何找到Scheme Racket中小写字母的数量?,scheme,racket,uppercase,lowercase,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")) 如何解决此问题?在函数中,您有两个问题: case是racket/scheme中预定

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

(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
    是标准库中的名称。对于R5R,这意味着未定义的行为;对于R6R和更高版本,这意味着库绑定将不可用。在
    #中!racket
    (我猜您使用这种语言是因为您标记了racket)它作为R6R工作。

    请指定代码的具体问题。如果字符串中的第一个字母是小写,则程序不返回(大小写(cdr列表))。我没有检查所有字符串。我解决了,解决方案是:(定义大小写(lambda(list)(if(null?list)0(if(char大写)(car list))(case(cdr list))(+1(case(cdr list)))))(case(string->list“SeheMe”))