gpt4 book ai didi

f# - 通过交替元素拆分列表

转载 作者:行者123 更新时间:2023-12-01 15:33:58 26 4
gpt4 key购买 nike

我正在尝试通过采用替代元素将 F# 列表拆分为两个。这是我的尝试:

let split l =  
let rec loop l isEven result1 result2 =
match l with
| [] -> result1 result2
| [head::tail] when isEven -> loop tail (not isEven) head::result1 result2
| [head::tail] -> loop tail (not isEven) result1 head::result2
loop l false [] []

这给了我一个错误:

Program.fs(5,39): error FS0001: Type mismatch. Expecting a  
'a
but given a
'b -> 'a list
The resulting type would be infinite when unifying ''a' and ''b -> 'a list'

我不明白它怎么可以是无限的,我不明白为什么它认为我给它一个从 'b 到 'a 列表的函数。有人可以告诉我哪里出错了吗?

最佳答案

Jack 很好地解释了问题所在。这是一次匹配两个元素的替代解决方案。 F# 的 pattern matching documentation有很多很好的例子。

let split list = 
let rec split odd even list =
match list with
| a::b::tail -> split (a::odd) (b::even) tail
| a::tail -> split (a::odd) even tail
| [] -> List.rev odd, List.rev even

split [] [] list

示例输出。

printfn "%A" (split [1 .. 10])
System.Console.ReadLine() |> ignore

([1; 3; 5; 7; 9], [2; 4; 6; 8; 10])

关于f# - 通过交替元素拆分列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14609606/

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