2

所以我遇到了这个函数定义,它接受一个列表(xs)并将它分成三个部分作为输出。

问题是我很难理解它。我理解第一部分采用列表(xs)的n,其中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
4

1 回答 1

6

第二部分删除第一个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`
于 2016-03-24T12:05:34.617 回答