#.net #string #recursion #f#
#.net #строка #рекурсия #f#
Вопрос:
Я пытаюсь рекурсивно разделить строку на список символов. Это то, что я должен сделать:
let rec explode2 (s: string) =
match s with
| "" -> []
| s ->
let newWord = s.[1..]
let newArr = List.ofArray(newWord.ToCharArray())
explode2 newWord
newArr
Я двигаюсь в правильном направлении?
Ответ №1:
Первая часть правильная (для возврата списка, а не массива):
match s with
| "" -> []
он обрабатывает регистр пустой строки, который в рекурсивной функции является конечным регистром.
Для второй части вам нужно:
- отделите первый символ от остальной части строки.
- вызовите функцию с остальной частью строки.
- объединить первый символ с возвращенным списком.
Для объединения элемента в список вы можете использовать ::
оператор:
c :: lst
Вы добираетесь до цели, так что продолжайте в том же духе.
Комментарии:
1. Спасибо! Это решение, которое я придумал, и оно работает, но я не совсем уверен, что происходит в последней строке, не могли бы вы объяснить?
let rec explode2 (s: string) = match s with | "" -> [] | s -> explode2 (s.Remove(0,1)) List.ofArray(s.ToCharArray())
2.
s.ToCharArray()
это встроенная функция, которая делает именно то, что вы хотите. Остальная часть кода фактически ничего не делает. Кроме того, он создаетList
вместо массива, это потому, чтоList.ofArray
преобразует массив в список.3. Правильно, спасибо! Это моя ошибка, функция должна возвращать
char list
, а не массив.4. Хорошо, я изменил ответ, чтобы вместо него возвращался список.
5. Я оставил это в качестве упражнения. Я пытался быть загадочным.