Với hammar's help Tôi đã thực hiện một mẫu Haskell chút mà biên dịchthừa số Đa thức trong Haskell
$(zModP 5)
để
newtype Z5 = Z5 Int
instance Additive.C Z5 where
(Z5 x) + (Z5 y) = Z5 $ (x + y) `mod` 5
...
bây giờ tôi đang phải đối mặt với một vấn đề mà tôi không nghĩ rằng tôi có thể giải quyết việc này đường.
Một thực tế đáng chú ý về đa thức là chúng vô dụng trong các lý do nếu chúng không thể sửa đổi được một số số nguyên tố p
. Tôi đã có một phương pháp mà brute-force cố gắng để nhân tố đa thức trên một trường (hữu hạn) đã cho.
Tôi muốn thử chạy chức năng này cho nhiều trường. Dưới đây là những gì tôi muốn:
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) ||
...
Về cơ bản tôi muốn thử chạy thuật toán bao thanh toán cho một số lượng lớn các định nghĩa "chia".
Tôi nghĩ rằng điều này có thể làm với TH, nhưng có vẻ như nó sẽ mất mãi mãi. Tôi tự hỏi nếu nó sẽ được dễ dàng hơn để chỉ cần vượt qua các hoạt động số học của tôi trong như một tham số để isIrreducible
?
Ngoài ra nó có vẻ như điều này có thể là một cái gì module Newtype có thể giúp với, nhưng tôi không thể nghĩ ra nó như thế nào sẽ làm việc mà không sử dụng TH theo một cách mà sẽ chỉ là khó khăn ...
Bất cứ ai có bất kỳ suy nghĩ về cách tốt nhất để thực hiện điều này?
Tôi đang sử dụng [đa thức] (http://hackage.haskell.org/packages/archive/numeric-prelude/0.2.2/doc/html/MathObj-Polynomial-Core.htm) từ sơ yếu số. Phần khó chịu của phương pháp của bạn là tôi phải truyền mô đun xung quanh mọi lúc; nó có lẽ dễ dàng hơn cách tôi đã làm nhưng vẫn rất khó chịu ... – Xodarap