gpt4 book ai didi

collections - 运行时取总值小于值

转载 作者:行者123 更新时间:2023-12-02 16:19:27 25 4
gpt4 key购买 nike

我正在尝试生成一个偶数列表,而列表中项目的总和小于给定的数字。例如,如果阈值 k 为 20,则预期输出为 [0;2;4;6;8]

我可以生成一个列表,其中最大值小于这样的阈值:

let listOfEvenNumbersSmallerThanTwenty =
Seq.unfold (fun x -> Some(x, x + 1)) 0 // natural numbers
|> Seq.filter (fun x -> x % 2 = 0) // even numbers
|> Seq.takeWhile (fun x -> x <= 20)
|> List.ofSeq

(我知道我可以将展开和过滤结合到 Some(x, x + 2) 但此任务仅用于教育目的)

我设法创建了一个运行总数小于阈值的不同列表:

let runningTotal =
listOfEvenNumbersSmallerThanTwenty
|> Seq.scan (+) 0
|> Seq.filter (fun x -> x < 20)
|> List.ofSeq

但为了做到这一点,我在 listOfEvenNumbersSmallerThanTwenty 中设置了阈值(这比所需的项目多得多)并且我丢失了初始序列。我也确实尝试过使用可变值来找到它,但我并不真的喜欢那条路线。

最佳答案

您可以创建一个小型谓词函数来封装可变总和。

let sumLessThan threshold =
let mutable sum = 0
fun x ->
sum <- sum + x
sum < threshold

用法非常简单,可以应用于任何序列

Seq.initInfinite ((*) 2) |> Seq.takeWhile (sumLessThan 20)

在封装时使用可变状态没有什么不好(检查 Seq 模块中可变变量的用法)

关于collections - 运行时取总值小于值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65850132/

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