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`