вернуть прописные буквы - PullRequest
0 голосов
/ 25 марта 2019

Я пишу функцию, которая может возвращать заглавные буквы из входной строки. И это хорошо работает, когда я показываю это. Однако кто-нибудь может сказать мне, как вернуть выходную строку, а не просто отобразить ее?

(define (convert input)
  (define s(string))
  (for ([i (string->list input)])
    (when (char-alphabetic? i)
       (let ((s(string-append s (string i))))
         (display (string-upcase s))))))

Ответы [ 2 ]

2 голосов
/ 25 марта 2019

Если вы хотите вернуть данные из функции, как вы здесь с возвратом строки, я предлагаю вам посмотреть базовый цикл for на его варианты, такие как for/list, for/vector, for/hash и for/fold.В этом случае for/list может помочь:

(define (convert input)
  (list->string
   (for/list ([i input] #:when (char-alphabetic? i))
     (char-upcase i))))

Используя его:

> (convert "ab1c23")
"ABC"
1 голос
/ 25 марта 2019

Вот одно из возможных решений:

(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"
...