隨着hammar's help我做了一個模板哈斯克爾位,它編譯因式分解在Haskell
$(zModP 5)
到
newtype Z5 = Z5 Int
instance Additive.C Z5 where
(Z5 x) + (Z5 y) = Z5 $ (x + y) `mod` 5
...
我現在面對的,我不認爲我可以解決這個問題辦法。
關於多項式的一個值得注意的事實是,如果它們是不可約的,則它們在有理數模中是不可約的p
。我已經有了一種蠻力嘗試在給定(有限)場上對多項式進行因式分解的方法。
我想嘗試運行此功能的多個領域。這裏有我想要的東西:
isIrreducible :: (FiniteField.C a) => Poly.T a -> Bool
isIrreducible p = ...
intPolyIrreducible :: Poly.T Int -> Bool
intPolyIrreducible p = isIrreducible (p :: Poly.T Z2) ||
isIrreducible (p :: Poly.T Z3) ||
isIrreducible (p :: Poly.T Z5) ||
...
基本上我想嘗試運行我的因子分解算法爲大量的「師」的定義。
我認爲這可能與TH有關,但它似乎需要永遠。我想知道是否將我的算術運算作爲參數傳遞給isIrreducible
會更容易?
或者它看起來這可能是東西NEWTYPE模塊可以與幫助,但我不認爲它會如何沒有辦法這將是一樣難以用TH工作...
任何人對如何最好地完成這件事有任何想法?
我使用數字前奏中的[polynomials](http://hackage.haskell.org/packages/archive/numeric-prelude/0.2.2/doc/html/MathObj-Polynomial-Core.htm)。你方法中令人討厭的部分是每次都必須傳遞模數;這可能比我做的更容易,但仍然有點煩人...... – Xodarap