【发布时间】:2018-05-28 06:34:28
【问题描述】:
如何按|first - second| 值的差异按升序对Int 对中的list 进行排序?
为了计算差异我写了这段代码:
ab :: (Int, Int) -> Int
ab (x, y) = if x - y >= 0 then (x - y)
else (x - y) * (-1)
我想在我得到的值上使用quicksort:
sort :: [(Int,Int)] -> [(Int,Int)]
sort [] = []
sort (x:xs) = sort smallerOrEqual ++ [x] ++ sort larger
where smallerOrEqual = [a | a <- xs, a <= x]
larger = [a | a <- xs, a > x]
问题是如何将我的ab 函数构建到the 排序函数中?我尝试了几种方法,但总是出现编译器错误。
【问题讨论】:
-
smallerOrEqual是什么?它有什么类型?你能用ab写一个适合那种类型的函数吗? -
smallerOrEqual具有与sort函数相同的类型:[(Int, Int)] -> [(Int, Int)]。我不知道如何编写ab以使其适合我的sort函数。因为虽然ab用于配对,但我在sort中使用配对列表。我是haskell的新手,这让我很困惑:( -
smallerOrEqual的定义在sort函数中。见where声明:where smallerOrEqual = [a | a <- xs, a <= x] -
您尝试过什么,尝试出现了什么错误?
-
对不起,我的扳机有点快,那里:$
标签: haskell tuples list-comprehension quicksort