Вот одно из возможных решений:
(define (convert input)
(list->string
(foldr (lambda (chr acc)
(if (char-alphabetic? chr)
(cons (char-upcase chr) acc)
acc))
'()
(string->list input))))
Нам нужно где-то накапливать результат, вместо того, чтобы печатать char за char.Для этого мы используем foldr
, чтобы обработать список символов, заглавные буквы алфавита и игнорируя остальные.Это создает список символов, которые мы конвертируем обратно в строку, используя list->string
.Работает как положено:
(convert "ab1c23")
=> "ABC"