gpt4 book ai didi

F# 检查列表是否已排序的函数

转载 作者:行者123 更新时间:2023-12-02 21:00:18 26 4
gpt4 key购买 nike

我必须编写一个函数,如果给定列表按升序排序,则该函数返回 true。空列表和 1 元素列表已排序。另外,[5,12,12] 应该返回 true。

我编写了一个似乎可以工作的函数:

let rec isSorted (l: int list) = 
match l with
| [] -> true
| [x] -> true
| [x;y] -> x <= y
| x::y::xr -> if x > y then false else isSorted([y] @ xr);

但这似乎有点不对...我想一定有一种更简单的方法来做到这一点?我讨厌我必须匹配 4 个案例,但我不知道如何让它变得更聪明。

还有更好的解决方案吗?

最佳答案

您可以组合现有功能:

let isAscending l = l |> Seq.pairwise |> Seq.forall (fun (a, b) -> a <= b)

printfn "%b" (isAscending []) // true
printfn "%b" (isAscending [1]) // true
printfn "%b" (isAscending [5;12]) // true
printfn "%b" (isAscending [5;12;12]) // true
printfn "%b" (isAscending [5;12;12;11]) // false

关于F# 检查列表是否已排序的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3642141/

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