大佬教程收集整理的这篇文章主要介绍了在Haskell中对抽象数据类型进行排序,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
type something = (Float,Float,Int,Aa,Bb,Cc,int)
如果我想在他们的第一个元素(Float)中找到最小的东西,我怎么能这样做?我的理由如下,但我无法设法如何实现它
因为我有一个东西的列表,最简单的方法应该是创建我自己的min帮助函数,比较2个东西并返回两个中最小的.然而,它试图做那种“更简单的方法”让我陷入类型编译错误……
findMin :: something -> something -> somthing findMin x y = sortBy (compare `on` fst) x y
我不熟悉sortBy并进行比较,我刚刚在SO中遇到了类似的问题,但我无法使其成功.作为Haskell的初学者,还有另一种方法可以解决这个问题吗?
import Data.ord import Data.List -- Dummy data types for example purposes. Derive from Show just so -- that the example can be more easily tested interactively in ghci. data Aa = Aa deriving Show data Cc = Cc deriving Show type Something = (Float,int) comparingFst :: Something -> Something -> Ordering comparingFst = comparing fstSomething where fstSomething (x,_,_) = x
现在您可以使用以下两个元素中的较小元素:
findMin :: Something -> Something -> Something findMin x y = case comparingFst x y of LT -> x _ -> y
或者从元素列表中
findMinimum :: [Something]-> Something findMinimum = minimumBy comparingFst
您还可以使用相同的辅助函数进行排序:
sortSomethings :: [Something] -> [Something] sortSomethings = sortBy comparingFst
此外,值得一提的是,默认情况下,元组从第一个元素开始按元素进行比较,因此假设您的Aa和Bb类型可以从Ord和Eq派生,您不需要任何额外的东西,即示例变为:
import Data.List data Ab = Ab deriving (Show,Ord,Eq) data Cc = Cc deriving (Show,Eq) type Something = (Float,Ab,int) findMin :: Something -> Something -> Something findMin x y = min x y findMinimum :: [Something]-> Something findMinimum = minimum sortSomethings :: [Something] -> [Something] sortSomethings = sort
换句话说,您可以按原样使用标准的min和sort函数.
以上是大佬教程为你收集整理的在Haskell中对抽象数据类型进行排序全部内容,希望文章能够帮你解决在Haskell中对抽象数据类型进行排序所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。