所以我有这个代码,基本上将k个项目拆分。 所以,如果有列表[1; 2; 3; 4; 5; 6; 7]并且我想将第一个k = 3个项目分开,那么它会将列表拆分为[1; 2; 3]和[ 4; 5; 6; 7]。
我想要返回这两个,所以我的计划是将它们放入列表列表中,或者将它们放入2个列表的元组中会更好。 所以我回来了[[1; 2; 3]; [4; 5; 6; 7]]或([1; 2; 3],[4; 5; 6; 7])。
我也尝试过将两个列表转换为元组,但我无法弄清楚如何返回最后一个模式匹配的列表空元组。
另外,我知道这可以通过某种.take或.split函数更简单,但我正在尝试理解F#所以我这样做。
但请帮忙!
我的错误是:
期待一个
'' A'
但给了一个
''列表'
let populateList k =
let data = [1;2;3;4;5;6;7]
let rec helper count aList =
match aList with
| head::tail when count < k ->
let theTail = tail
let newList = head :: helper (count+1) tail
//let aTuple = (theTail,newList)
//aTuple
[theTail; newList]
| _ -> []
helper 0 data
populateList 3
答案 0 :(得分:3)
辅助函数必须跟踪结果列表才能在递归构造中工作。这是一个例子:
let populateList k =
let data = [1;2;3;4;5;6;7]
let rec helper count (first_k, rest) =
if count < k then
match rest with
| a::tail -> helper (count+1) (a::first_k, tail)
| _ -> ([],[])
else (first_k |> List.rev, rest)
helper 0 ([], data)
populateList 3