繁体   English   中英

在Haskell中按总值(距离?)排序非数字元组

[英]Ordering non-numeric tuples by total value (distance?) in Haskell

编辑:我刚刚意识到这根本不会解决问题,除了集合中每个条目的列表(即获得(a,e)(b,d)的比较值对我没有帮助如果列表不包含e,但确实包含f)。 DERP。 也就是说,Haskell中有序但非数字集的距离比较问题仍然很有趣,所以......

我必须写一个函数

pairs :: Ord a => [a] -> [(a,a)]

它从列表中返回所有对(x i ,x j ),其中x i <x j且i <j。

这与列表推导相当简单。 现在,我需要它排序,我需要它按元组的“顺序”排序。 也就是说,组合顺序 - (a,z)需要在(b,c)之后走很长的路。 对于整数,这很容易 - 将x i添加到x j并将其用于比较。

然而,这已经超过了Ord ,所以这个功能必须采取像chars这样令人讨厌的东西,而在Haskell中,我所知道的只有GTLTEQ - 而不是GT 有没有办法让Haskell说出来

Z大于A 25

或类似的东西? 或者关于如何对此进行排序的任何其他想法?

(实际任务涉及完成谓词,对于任何列表xs是另一个列表的前缀yspairs xspairs ys的前缀。我只是觉得在生成它之后对列表进行排序可能是通往go.EDIT2:通过向后迭代列表来解决它,对于那些想知道的人。)

这种排序不可能存在。 不只是在Haskell,而是在任何地方 - 这在数学上是不可能的!

通过严格排序元组,您基本上创建了二维域和一维域之间的映射。 这需要是双射的,以保持秩序公理。 然后,请您谈一下距离,就是在这种情况下,拓扑性质和总是工作类似于真实的线ℝ映射到2D平面ℝ2的问题。
存在这样的双射,但是映射及其反转都是连续的(这对于保持任何一致意义上的距离是必要的)是不可能的。

所以你想要的是不可能实现的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM