我正在编写一个程序,要求我将str中的所有大写字母都转换为小写,并将小写字母转换为大写,并且所有其他字符保持不变。 下面是我的代码:
(define (switch-case str)
(list->string (switch-char (string->list str))))
(define (switch-char loc)
(cons
(cond
[(empty? (first loc)) empty]
[(char-lower-case? (first loc)) (char-upcase (first loc))]
[(char-upper-case? (first loc)) (char-downcase (first loc))]
[else (first loc)]) (switch-char (rest loc))))
(开关箱“ ABC”)的错误消息是:
first:需要一个非空列表;给定:空
有人可以帮我吗?我不知道代码的哪一部分是错误的:(
答案 0 :(得分:1)
您的代码中存在几个语法错误。我建议您花更多时间研究Scheme的基本语法,以及如何构造递归过程。请注意:
cons
不应该存在。(empty? loc)
。else
的方式。cons
发挥作用的地方!此版本解决了上述所有问题:
(define (switch-char loc)
(cond
[(empty? loc) empty]
[(char-lower-case? (first loc))
(cons (char-upcase (first loc)) (switch-char (rest loc)))]
[(char-upper-case? (first loc))
(cons (char-downcase (first loc)) (switch-char (rest loc)))]
[else (cons (first loc) (switch-char (rest loc)))]))