Haskell - 使用 Take 和 Drop 将列表分成三部分
Haskell - Use of Take and Drop to split a list into three parts
所以我遇到了这个函数定义,它接受一个列表 (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
第二部分删除前 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`
所以我遇到了这个函数定义,它接受一个列表 (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
第二部分删除前 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`