【发布时间】:2015-05-21 17:36:38
【问题描述】:
我有一个这样的列表
[(1,2),(2,1),(3,3)]
我想按第二个元素对其进行排序,所以它是:
[(3,3),(1,2),(2,1)]
我试过了
mySort t = sortBy (compare `on` (\(a,b)->b)) t
但 ghci 显然无法识别 sortBy
好的,编辑:
我正在使用 GHCi 编译实际的 .hs 文件,所以我有我的头文件:
import Data.List (sortBy)
import Data.Function (on)
module TupleListPolynomial where
type Poly = [(Float,Int)]
如果我这样写,编译器将无法识别“模块”(使用 :l 和 :r btw):
[1 of 1] Compiling Main ( TupleListPolynomial.hs, interpreted )
TupleListPolynomial.hs:5:1: parse error on input ‘module’
如果我翻转它并在下面写入导入,它将无法识别“导入”并出现相同的错误。
编辑:这样解决:
module TupleListPolynomial where
import Data.List (sortBy)
import Data.Function (on)
type Poly = [(Float,Int)]
【问题讨论】:
-
忘记了
import Data.List (sortBy)? (在你问之前:import Data.Function (on)太;) - 是的,你必须做一些关于descending - hint:你可以使用flip compare) -
另外,您可以将
\(a,b)->b替换为snd -
您需要在
on周围使用反引号 (`),而不是常规撇号。 -
好的 - 最后一部分:你必须把
import部分放在module部分之后 -
只是一个简单的建议/观察:我猜这里的
Int部分是为您的指数 - 但您可以简单地通过列出它的系数来表示多项式,因此a_0 * X^0 + a_1 * X^1 + ... + a_n * X^n可以简单地表示为 @987654337 @ - 这样你就不必对任何东西进行排序,你可以写newtype Poly = P [float](或者使用Num a => ...使其更通用,使用Num a => ...进行多项式运算) - 新类型就在那里,因为我认为你很快就会使它成为Num的实例;)
标签: sorting haskell tuples elements