gpt4 book ai didi

sorting - 组成两个比较函数?

转载 作者:行者123 更新时间:2023-12-03 08:26:29 25 4
gpt4 key购买 nike

我想先按一个属性排序,然后再按另一个(如果第一个属性相同。)

Haskell 中组合两个比较函数的惯用方式是什么,即与 sortBy 一起使用的函数?

给定

f :: Ord a => a -> a -> Ordering
g :: Ord a => a -> a -> Ordering

作曲 fg会产生:
h x y = case v of
EQ -> g x y
otherwise -> v
where v = f x y

最佳答案

vitus 指出了 Monoid 的非常酷的实例对于 Ordering .如果将它与实例 instance Monoid b => Monoid (a -> b) 结合使用事实证明,您的合成功能只是(准备好):

mappend

一探究竟:
Prelude Data.Monoid> let f a b = EQ
Prelude Data.Monoid> let g a b = LT
Prelude Data.Monoid> :t f `mappend` g
f `mappend` g :: t -> t1 -> Ordering
Prelude Data.Monoid> (f `mappend` g) undefined undefined
LT
Prelude Data.Monoid> let f a b = GT
Prelude Data.Monoid> (f `mappend` g) undefined undefined
GT

+1 用于强大而简单的抽象

关于sorting - 组成两个比较函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11486436/

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