gpt4 book ai didi

haskell - Haskell 中的自定义排序

转载 作者:行者123 更新时间:2023-12-02 15:34:23 29 4
gpt4 key购买 nike

第二次更新:

我最终按照zurgl的建议写了something递归地遍历和分组。感谢所有试图提供帮助的人!

第一次更新:

我希望可以是一个排序功能,但不确定,旨在优化随后的分组(最小化组数)。分组收集水平或垂直相邻的元组:

f xs = 
foldr (\a@(y,x) ((b@(y',x'):xs):bs) -> if (y == y' && abs (x-x') == 1) ||
(x == x' && abs (y-y') == 1)
then (a:b:xs):bs
else [a]:(b:xs):bs)
[[last xs]] (init xs)

“排序”后第二个示例的输出:

*Main> f [(0,1),(1,1),(2,1),(2,2),(2,3),(1,3),(0,3),(4,1),(4,2)]
[[(0,1),(1,1),(2,1),(2,2),(2,3),(1,3),(0,3)],[(4,1),(4,2)]]

--更新结束--

我在构思排序功能时遇到困难,希望有人知道如何实现它,或者也许会说是否需要比自定义排序更多的功能。我尝试过使用 sortBy 但似乎没有取得太大进展。

我如何从中得到:

[(0,1),(0,3),(1,1),(1,3),(2,0),(2,1),(2,3),(4,1),(4,2)]

对此:

[(0,1),(1,1),(2,0),(2,1),(0,3),(1,3),(2,3),(4,1),(4,2)]

y y' 和 x x' 之间的 0 或 1 差异应该是主要的。这有道理吗?

第二个例子:

[(0,1),(0,3),(1,1),(1,3),(2,1),(2,2),(2,3),(4,1),(4,2)] 
=>
[(0,1),(1,1),(2,1),(2,2),(2,3),(1,3),(0,3),(4,1),(4,2)]

最佳答案

我的 Haskell 非常生锈,但这应该可以做到

subsortGT a, b
| a <= b = GT
| a > b = LT

sortGT (a1, b1) (a2, b2)
| a1 + b1 < a2 + b2 = GT
| a1 + b1 > a2 + b2 = LT
| a1 + b1 == a2 + b2= subsortGT a1 a2

sortBy sortGT [(0,1),(0,3),(1,1),(1,3),(2,0),(2,1),(2,3),(4,1),(4,2)]

关于haskell - Haskell 中的自定义排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16329830/

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