Изменение определенных букв в строке - PullRequest
0 голосов
/ 05 марта 2011

Редактировать:

(define leet-helper
  (lambda (string)
    (cond
      [(null? (string->list string)) ""]
      [(equal? (car string)#\e)
       (cons 3 (leet-speak (cdr string)))]
      [(equal?  (car string) #\s)
       (cons 5 (leet-speak (cdr string)))]
      [(equal? (car string) #\o)
       (cons 0 (leet-speak (cdr string)))]
      [else string])))

(define leet-speak
  (lambda (string)
    (list->string (string->list (leet-speak string)))))

Я работаю над проблемой, которая берет строку и возвращает ту же строку, когда все е превращены в 3, все s в 5, а все o в 0.Я опубликовал то, что создал до сих пор, но продолжаю получать ошибки, когда пытаюсь проверить это, так что я знаю, что что-то делаю неправильно.Кроме того ... этот код имеет 3 отдельных условных выражений, но если задана строка "eso", я хочу изменить все 3 символа, а не только "e".Я не уверен, как это сделать, или если моя рекурсия сама об этом позаботится [?].Любые указатели будут оценены!

(define leet-speak
  (lambda (string)
    (cond
      [(null? (string->list string)) ""]
      [(equal? (car (string->list string)) 'e) 
       (list->string (cons 3 (leet-speak (cdr (string->list string)))))]
      [(equal? (string->list (car string)) 's)
       (list->string (cons 5 (leet-speak (cdr (string->list string)))))]
      [(equal? (string->list (car string)) 'o)
       (list->string (cons 0 (leet-speak (cdr (string->list string)))))])))

1 Ответ

1 голос
/ 05 марта 2011

Теперь предположим, что мы тестируем вашу программу (пошагово вручную) со строкой «test». Первая ошибка, которую мы видим, состоит в том, что у вас нет случая else. Во-вторых, вы заметите, что когда вы сравниваете (car (string->list string)) с 'e, вы всегда получаете false, потому что когда строка декомпозируется, она декомпозируется как символы (#\e), а не как символы.

Я бы посоветовал, когда вы тестируете свой код, обратите внимание на ошибки, которые вы продолжаете получать (что за ошибки? Вы не упоминаете их в своем вопросе; схема обычно довольно информативна с сообщениями об ошибках) и попробуйте исправить каждый из них. Например, если вы получите

string->list : expects argument of type <string>; given myinput

тогда вы знаете, что что-то не так с типом myinput, который вы даете string->list. Этот тип ошибок встречается в вашем коде несколько раз. Один из способов, который мне нравится использовать, когда у меня возникают проблемы с рекурсивными типами ввода, - это использовать вспомогательные функции / функции-оболочки ( подсказка ).

Более того, хороший способ протестировать рекурсивные программы - это запустить их вручную (например, с помощью строки «test», как упоминалось в начале), а затем посмотреть, где вы застряли и исправить программу соответствующим образом.

Я надеюсь, что это поможет установить вас в правильном направлении, и дайте мне знать, если вам нужно больше указателей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...