Polynomes を最初に長さ (度) で、2 番目に係数で比較して順序付けできるようにしたいと考えています。多項式は、 を含む double のリストです[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]
false です。これは良くありません。等しいはずです!