#string #list #racket #racket-student-languages
#строка #Список #racket #racket-student-языки
Вопрос:
Итак, я практиковал язык для начинающих racket, когда у меня возник этот вопрос.
Напишите функцию str-replace
, которая использует строку, целевой символ и символ замены. Функция создает новую строку, которая идентична используемой строке, при этом все вхождения целевого символа (если таковые имеются) заменяются символом замены. Например, (string-replace "word" #o #y) ⇒ "wyrd"
.
Примечание: я не могу использовать какие-либо встроенные строковые функции, кроме string->list
и list->string
.
Итак, я начал с кода, теперь я застрял, как мне использовать функцию-оболочку для этого кода, пока у меня есть только это
;; los is list of string
(define(str-replace los)
( (first los)
(first (rest los))
(first (rest (rest los)))
(first (rest (rest (rest los))))))
Ответ №1:
Определите функцию преобразования, которая работает со списками:
(define (replace-in-list input-list from-char to-char)
(if (null? input-list)
...
(cons ...
(replace-in-list ... from-char to-char))))
(Вы должны заполнить пробел ...
)
И вызовите его из другого:
(define (str-replace input-string from-char to-char)
(list->string
(replace-in-list
(string->list input-string) from-char to-char)))
Комментарии:
1. Чем заполнить пробелы? Я в замешательстве…. Также, как это будет работать для функции str-replace, не могли бы вы уточнить, пожалуйста?
2. @Kiterunner (1) Я переименовал вторую функцию как
str-replace
. (2) Я не дал вам полного решения, вы должны подумать о том, что входит...
. Что должна возвращать первая функция в случае, если ей предоставлен пустой список? что нужно сделать для каждого символа в списке? Вся необходимая информация ждет вас где-то. Смотрите, например docs.racket-lang.org и mitpress.mit.edu/sicp/full-text/book/book.html .