Я нашел этот кусок кода по вопросу, который похож на тот, который я пытаюсь решить, и я пытаюсь применить логику этой функции к своей проблеме , Однако объяснение кода не совсем понятно по этому вопросу. Код выглядит следующим образом:Разбиение списка на кортеж списков по указанному индексу
splitAtIndex :: Int -> [a] -> ([a], [a])
splitAtIndex 0 xs = ([], xs)
splitAtIndex _ [] = ([], [])
splitAtIndex x (y:ys) = (y:ys', ys'')
where
(ys', ys'') = splitAtIndex (x - 1) ys
, как я понимаю, что вы принимаете индекс и весь список и сформировать кортеж списков, где кортеж списков равно рекурсивного вызова индекса-1 хвоста списка. Я что-то упустил? Здесь важно использование апострофов? Я действительно не вижу, где происходит разделение списка. Я уверен, что однажды объяснил, что это будет просто, но я не могу понять этого.
Спасибо!
Апострофы только как буквы в этом контексте. 'Ys'' является обычным идентификатором. Это может быть любой другой идентификатор. Используйте' xyzzy123 'или что-то еще. Не совсем ясно, каковы ваши другие трудности.« Где «раскол»? Вся эта функция «где». Новые списки создаются постепенно. Если вы ожидаете, что исходный список будет разрушен какое-то место, то нет, этого не происходит в Haskell. –
Я предполагаю, что то, о чем я прошу, является пошаговым объяснением того, что происходит для выполнения разделения, извините за то, что он не ясен. – Bradley
Функция (1) определяет как разбить список на некоторый индекс с точки зрения разделения меньшего списка на меньший индекс, а pr ovides два особых случая: (2) разбиение списка на индекс 0 и (3) разделение пустого списка.Давайте поговорим о (1). Можете ли вы объяснить на простом английском языке, не глядя в код, как разбить список, предполагая, что вы уже знаете, как разбить меньший список? –