gpt4 book ai didi

sorting - OCaml - 如何对对进行排序?

转载 作者:行者123 更新时间:2023-12-02 14:58:50 25 4
gpt4 key购买 nike

我们有对:

 (3,10000) (1,2),(2,11) (2,0) (2, 10) (1,1000000)

我们想订购:

 (1,2) (1,1000000), (2,0) (2, 10) (2,11) (3,10000)

如何在 OCaml 中做到这一点?

最佳答案

List.sort函数可以对任何 'a 列表 进行排序,它采用 'a -> 'a -> int 类型的比较函数,如果第一个参数是,则该函数必须返回负数严格小于第二个,如果严格大于则为正,如果相等则为零。

let lexicographic_compare (x,y) (x',y') =
let compare_fst = compare x x' in
if compare_fst <> 0 then compare_fst
else compare y y'

# List.sort lexicographic_compare [ (3,10000); (1,2); (2,11); (2,0); (2, 10); (1,1000000)];;
- : (int * int) list =
[(1, 2); (1, 1000000); (2, 0); (2, 10); (2, 11); (3, 10000)]

(此代码使用内置的 compare 函数对整数执行正确的操作。)

请注意,在实践中,compare 函数已经按字典顺序比较对,因此 List.sort Compare ... (无需编写任何新代码)似乎可以工作。但它如何在成对上工作并没有指定,所以它将来可能会改变,依赖于此是不好的风格。如果您想要精确的比较顺序,您应该编写特定于域的比较。

(当然,有些库已经提供了这个 lexicography_compare 逻辑;但重点是要学习如何自己做到这一点。)

关于sorting - OCaml - 如何对对进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20347688/

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