Переключение верхнего и нижнего регистра строки - PullRequest
0 голосов
/ 10 октября 2019

Я задаю вопрос, где мне предлагается преобразовать все верхние и нижние регистры строки в нижние и нижние регистры в верхние, а все остальные символы остаются прежними.

Ниже приведен мой код:

(define (switch-case str)
  (list->string
  (cons
  (cond
    [(char-lower-case? (first (string->list str))) (char-upcase (first 
(string->list str)))]
    [(char-upper-case? (first (string->list str))) (char-downcase (first 
(string->list str)))]
    [else (first (string->list str))])
  (switch-case (rest (string->list str))))))

Сообщение об ошибке для строки "ABC": string-> list: ожидает заданную строку (cons # \ B (cons # \ C пусто)) Может кто-нибудь сказать мне, что пошло не так с моим кодом? Thx

1 Ответ

1 голос
/ 11 октября 2019

Рекурсивный вызов имеет неправильный тип. Вы передаете [List-of Character] на switch-case, но оно ожидает String.

; String -> String
(define (switch-case str)
  (list->string
   (cons
    (swapcase nestr)
    (switch-case
     (rest (string->list str)) ; the type of this expression is [List-of Character]
                 ))))

. Следуйте этому шаблону:

; [List-of Character] -> [List-of Character]
(define (switch-case-charlist cl)
  (cond [(empty? cl) ...]
        [else (... (first cl) ... (switch-case-charlist (rest cl)))]))

; Character -> Character
(define (swap-case-character c)
  ...)

; String -> String
(define (swap-case-string s)
  (list->string (... (string->list s))))
...