Это похоже на проблему с домашним заданием, которая предназначена для того, чтобы научить вас думать о рекурсии.Для меня было бы проще подумать о рекурсивной части, если вы определитесь с основными операциями, которые собираетесь использовать.Вы не можете использовать назначения, списки или итерации, хорошо.Вам нужно каким-то образом извлечь части вашей входной строки, но вы, очевидно, не можете использовать встроенную функцию подстроки для этого, что противоречило бы цели упражнения.Единственная другая операция, о которой я могу подумать, это та, которая извлекает один символ из строки:
# "abcd".[2];;
- : char = 'c'
Вам также нужен способ добавить символ в строку, давая более длинную строку.Но вы не можете использовать назначение, чтобы сделать это.Мне кажется, вам придется использовать String.make
для перевода вашего символа в строку:
# String.make 1 'a';;
- : string = "a"
Затем вы можете объединить две строки, используя оператор ^
:
# "abc" ^ "def"
- : string = "abcdef"
Вам разрешено использовать эти три операции?Если это так, вы можете начать думать о рекурсивной части проблемы подстроки.Если нет, то я, вероятно, недостаточно хорошо понимаю проблему, чтобы дать совет.(Или, может быть, тот, кто установил ограничения, не ожидал, что вам придется вычислять подстроки? Обычно ограничения также являются своего рода подсказкой о том, как вам следует действовать.)
Переходя к конкретному вопросу.Начиная программирование на FP, вы обычно не хотите передавать ответ на рекурсивные вызовы.Вы хотите передать меньшую проблему рекурсивному вызову и получить от нее ответ back .Для проблемы подстроки, примером меньшей проблемы является запрос подстроки, которая начинается на один символ дальше в содержащей строке, и это на один символ короче.
(Позже вы можете передатьчастичные ответы на ваши рекурсивные вызовы, чтобы получить хвостово-рекурсивное поведение. Я говорю, пока не беспокойтесь об этом.)