gpt4 book ai didi

F#:通过模式匹配返回列表列表时出现问题?

转载 作者:行者123 更新时间:2023-12-01 13:19:47 26 4
gpt4 key购买 nike

所以我有这段代码,基本上可以将列表分成 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#,所以我这样做。

但是请帮忙!我的错误是:期待一个''一个'
但给出了''列表'

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

最佳答案

辅助函数必须跟踪两个结果列表以在递归结构中工作。这是一个例子:

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

关于F#:通过模式匹配返回列表列表时出现问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50620729/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com