В racket как мне заменить слово в строке, используя только строку-> список или список-> строковую функцию?

#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 .