编辑:我刚刚意识到这根本不会解决问题,除了集合中每个条目的列表(即,如果列表不包含 e,则获得比较值(a,e)
并且根本不会帮助我,但是(b,d)
确实包含 f)。德普。也就是说,Haskell 中有序但非数字集的距离比较问题仍然是 IMO 有趣的,所以......
我必须写一个函数
pairs :: Ord a => [a] -> [(a,a)]
它从 x i < x j和 i < j的列表中返回所有对 (x i , x j )。
这对于列表推导非常简单。现在,我需要它排序,并且我需要它按元组的“顺序”排序。也就是说,组合顺序 - (a,z) 需要在 (b,c) 之后很长一段时间。对于整数,这很容易 - 将 x i添加到 x j并将其用于比较。
然而,这已经结束了Ord
,所以这个函数必须接受像字符这样令人讨厌的东西,而在 Haskell 中,我所知道的只是GT
,LT
或EQ
- 而不是多少GT
。有没有办法让 Haskell 说
Z
大于 25A
或类似的东西?或者关于如何排序的任何其他想法?
(实际任务涉及满足谓词,即对于任何xs
作为另一个列表前缀的列表ys
,pairs xs
它是 的前缀pairs ys
。我只是觉得在生成列表后对列表进行排序可能是要走的路。EDIT2:解决了它通过向后迭代列表,对于那些想知道的人。)