Вопрос следующий:
- Использовать накопительную рекурсию
- Функция потребляет строку и создает новую строку
- Каждый символ, который появляется последовательно, заменяется буквой и количеством раз его последовательного появления.
- Пример: "hellooo" => "hel2o3"
- Вопрос основан на университетском уровне
Я пробовал следующее:
(define (abbreviate str)
(local [(define str-lst (string->list str))
(define (count-duplicate lst char count)
(cond
[(empty? lst) count]
[(equal? (first lst) char)
(count-duplicate (rest lst)
(first lst)
(add1 count))]
[else (count-duplicate (rest lst)
(first lst)
count)]))
(define (build-string lst)
(cond
[(empty? lst) empty]
[else (cons (first lst)
(cons (string->list (number->string
(count-duplicate (rest lst)
(first lst) 1)))
(build-string (rest lst))))]))]
(build-string str-lst)))
Но я получаю результат:
(список #\h (список #\4) #\e (список #\4) #\l (список #\4) #\l (список #\3) #\o (список #\3) #\o (список #\2) #\o (список #\1))
Любая помощь?