gpt4 book ai didi

list - F# 整数列表中的排序子列表

转载 作者:行者123 更新时间:2023-12-04 08:25:47 27 4
gpt4 key购买 nike

我正在尝试获取一个子列表,其中包含 F# 中从左到右的最大元素,然后最终是第二大元素。例如,如果我有 list1 = [2;5;3;4] 我应该可以得到 [5;4] 其结果。 list1 = [2;1;3;4] 将是 [4] 等等。我真的想不出一个聪明的方法来做到这一点。我得到以下几行:

let rec top<'a when 'a: comparison> (xs: List<'a>): List<'a> =
match xs with
| [] -> invalidArg "xs" "Empty list"
| [x] -> x::xs
| x1::x2::xs' -> top((max x1 x2)::xs')
这给了我 [5;5] 而不是 [5;4]
我将衷心感谢您的帮助。谢谢

最佳答案

您可以使用辅助递归函数来完成。

let top list =
let rec loop n = function
| [] -> [n]
| [x] -> if n < x then [x] else [n; x]
| x :: xs -> loop (max n x) xs
match list with
| [] -> invalidArg "list" "Empty list"
| x :: xs -> loop x xs
或使用 list.fold
let top (list: int list): int list =
List.fold (fun s x -> if s.Head < x then [x] else [s.Head; x])
[list.Head]
list.Tail

关于list - F# 整数列表中的排序子列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65271365/

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