Haskell - Использование Take and Drop для разделения списка на три части

Итак, я наткнулся на это определение функции, которое берет список (xs) и разбивает его на три части в качестве вывода.

Дело в том, что мне трудно это понять. Я понимаю первую часть, в которой берется n из списка (xs), где n определяется как деление длины списка (xs) на 3. Но после этого я не уверен до конца уверен, что происходит.

Если бы кто-нибудь мог провести меня через эту функцию, это было бы здорово.

Вот код:

--SPLITS A LIST INTO THREE PARTS---------------------------------------------------------

split3 xs = (take n xs , take n (drop n xs) , drop (n*2) xs)
    where n = length xs `div` 3

1 ответ

Решение

Вторая часть опускает первую n элементы и принимает следующее n элементы.

[------- n -------][------- n -------][------- n -------]
^                  ^
dropped            taken by `take`    ^ dropped by `take`

Конкретным примером может быть список [1,2,3], n == 1,

take n (drop n xs)
== take 1 (drop 1 [1,2,3])
== take 1 [2,3]
== 2

Третья часть падает дважды n и берет остальное

[----             2n            -----][---- n -----]
^                                     ^
dropped                               taken by `drop`
Другие вопросы по тегам