http://zvon.org/other/haskell/Outputlist/sortBy_f.html上的示例2 定义了比较函数xxx a b = if (odd a) then LT else GT.Haskell似乎对此作为比较函数感到满意,但在这种情况下我不理解"比较"的含义.什么是允许这样的东西的应用程序?(这里,2> 4和4> 2.)
作为参考,请考虑Python和Mathematica方法:列表基于单变量"键"函数进行排序,该函数将列表项映射到已订购的项.这看起来非常明智.(实际上,Python将类似Haskell的比较排序为多余的,并用排序键替换它们.)Haskell(显然)对此进行判断的基础是什么?是否有任何关于提供sortOn功能的讨论,以鼓励更"一致"(?)的"比较"概念.(我认识到一个"关键"函数可以用在比较函数中,或者使数据类型被排序为一个实例Ord,但这只是感觉不必要的尴尬和间接的东西这么简单.)
我错过了什么?这只是遗留问题,就像Python丢弃的那样,还是存在这种情况的数学动机?
编辑:如Nouri所述,Data.List.sortOn确实存在于列表中.这显然是在2014年增加的.
sortBy基本上以相同的方式不受约束,并且基本上相同的原因,Ord实例通常是不受约束的.Haskell不依赖于键入.在Haskell中,你根本无法陈述或证明某个关系实际上是一个总排序.在像Agda这样的语言中,sortBy可以证明排序确实是一个,并产生证据,证明结果确实是输入的排序排列.这不容易!Python方法似乎失去了一些灵活性而没有获得任何保证,因此它不会像解决方案那样闻起来.