我是 F# 的新手,我正在尝试编写一个方法 split 将列表分成两部分。它需要一个元组,第一个元素是要拆分的元素数,第二个元素是列表。例如, split (2, [1;2;3;4;5;6]) 应该返回 ([1;2], [3;4;5;6]),
这是我到目前为止所拥有的,但由于某种原因,它将元组的第二个元素作为没有头部的原始列表返回。我不明白这一点,因为我认为 x::xs 会自动使 x 成为头元素,而 xs 成为列表的其余部分,这意味着每个递归调用都会占用前一个列表的尾部并切断第一项。
let rec split = function
|(n, []) -> ([], [])
|(0, xs) -> ([], xs)
|(n, x::xs) -> let temp = x :: fst (split(n-1, xs))
(temp, xs);;