gpt4 book ai didi

f# - 多个序列的惰性笛卡尔积(序列的序列)

转载 作者:行者123 更新时间:2023-12-04 08:37:44 26 4
gpt4 key购买 nike

你能建议更简单、更清晰的方法来编写这个函数吗?

let cartesian_product sequences = 
let step acc sequence = seq {
for x in acc do
for y in sequence do
yield Seq.append x [y] }
Seq.fold step (Seq.singleton Seq.empty) sequences

最佳答案

我对链接到的 Juliet 函数进行了基准测试:

let items = List.init 6 (fun _ -> [0..9])
cart1 items |> Seq.length |> ignore

Real: 00:00:03.324, CPU: 00:00:03.322, GC gen0: 80, gen1: 0, gen2: 0



和你的一个稍微修改(使其成为苹果对苹果的比较)版本:
let cartesian items =
items |> Seq.fold (fun acc s ->
seq { for x in acc do for y in s do yield x @ [y] }) (Seq.singleton [])

cartesian items |> Seq.length |> ignore

Real: 00:00:00.763, CPU: 00:00:00.780, GC gen0: 37, gen1: 2, gen2: 1



你的速度明显更快(并且导致更少的GC)。在我看来,你拥有的东西很好。

关于f# - 多个序列的惰性笛卡尔积(序列的序列),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6497058/

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