gpt4 book ai didi

f# - 有没有更惯用的方法来生成无限的 uint64 序列?

转载 作者:行者123 更新时间:2023-12-02 05:59:54 34 4
gpt4 key购买 nike

let makeIdGenerator startvalue =
let index : uint64 ref = ref startvalue
fun () ->
let result = !index
index := !index + 1UL
result

我需要的是一个类型为 unit -> uint64 的函数的生成器如上所示。

上面的代码可以工作,但使用了一个引用变量来记住生成器的状态。

尝试使用无限序列,如 Seq.initInfinite (fun i -> i)不起作用,因为序列本身使用 uint32对于它的状态。

这里有没有人知道即使没有引用变量也能做到这一点的方法?也许通过递归和 yield 之类的方式?

提前致谢。

最佳答案

避免循环中可变状态的标准函数式编程方法是将其传递到参数中。

如果您想要一个无限序列,您可以使用一个序列表达式,其中 yield 用于“第一个”结果,yield! 用于递归调用:

let genUint64() =
let rec genFrom n =
seq {
yield n
yield! genFrom (n+1UL)
}
genFrom 0UL

关于f# - 有没有更惯用的方法来生成无限的 uint64 序列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29632482/

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