我希望能够通过首先按长度(度)比较,其次按系数比较来订购多项式。多项式是带有 的双精度列表[1,2,3] = 3x²+2x+1
。但是如果最后一个元素是零,它应该被删除,所以我写了一个函数来做这件事,叫做realPolynom
. realPolynom [1,2,3,0] = [1,2,3]
现在,我的 Ord 实例如下所示:
instance Ord Polynom where
compare a b = compare ((realLength a), reverse (pol2list (realPolynom a))) ((realLength b), reverse (pol2list (realPolynom b)))
realLength
只是最后一个没有零的多项式的长度。
pLength :: Polynom -> Int
pLength (Polynom(a)) = length a
realLength :: Polynom -> Int
realLength a = pLength(realPolynom(a))
pol2list
是Polynom p = p
pol2list :: Polynom -> [Double]
pol2list (Polynom p) = p
问题是:
[0,2,0] < [0,2,3]
真的,这很好[0,2,0] < [0,2]
假的,也不错[0,2,0] > [0,2]
假的,也不错[0,2,0] == [0,2]
假的,不好!应该是平等的!