Haskell - 使用Take和Drop将列表拆分为三个部分

时间:2016-03-24 11:59:43

标签: list haskell take function-definition

所以我遇到了这个函数定义,它接受一个列表(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 个答案:

答案 0 :(得分:5)

第二部分删除了第一个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`