Теперь предположим, что мы тестируем вашу программу (пошагово вручную) со строкой «test». Первая ошибка, которую мы видим, состоит в том, что у вас нет случая else
. Во-вторых, вы заметите, что когда вы сравниваете (car (string->list string))
с 'e
, вы всегда получаете false, потому что когда строка декомпозируется, она декомпозируется как символы (#\e
), а не как символы.
Я бы посоветовал, когда вы тестируете свой код, обратите внимание на ошибки, которые вы продолжаете получать (что за ошибки? Вы не упоминаете их в своем вопросе; схема обычно довольно информативна с сообщениями об ошибках) и попробуйте исправить каждый из них. Например, если вы получите
string->list : expects argument of type <string>; given myinput
тогда вы знаете, что что-то не так с типом myinput
, который вы даете string->list
. Этот тип ошибок встречается в вашем коде несколько раз. Один из способов, который мне нравится использовать, когда у меня возникают проблемы с рекурсивными типами ввода, - это использовать вспомогательные функции / функции-оболочки ( подсказка ).
Более того, хороший способ протестировать рекурсивные программы - это запустить их вручную (например, с помощью строки «test», как упоминалось в начале), а затем посмотреть, где вы застряли и исправить программу соответствующим образом.
Я надеюсь, что это поможет установить вас в правильном направлении, и дайте мне знать, если вам нужно больше указателей.