【发布时间】:2013-11-26 18:42:55
【问题描述】:
我正在从事一个适用于模块化算术的项目。 我在调用该函数时遇到了模式匹配问题。 这是 Modular 类型的构造函数。 madd 需要两个 Modular 类型的实例,并假设将它们相加返回 Modular 类型。
data Modular = Mod Integer Integer deriving Show
instance (Eq Modular) where
(Mod a1 m1) == (Mod a2 m2) = m1==m2 && mod (a1-a2) m1 == 0
-- Adds two modular numbers of the same modulus
madd :: Modular -> Modular -> Modular
madd (Mod a1 m1) (Mod a2 m2) | m1 == m2 = Mod (mod (a1+a2) m1) m1
谁能帮助我,为什么我会得到非详尽的模式匹配? 错误是这样的:
Warning: Pattern match(es) are non-exhaustive
In an equation for `madd':
Patterns not matched: (Mod _ _) (Mod _ _)
顺便说一句,我在 Eclipse IDE 中使用了 haskell 插件。
【问题讨论】:
-
如果
m1 /= m2会发生什么? -
tom,将其发布为答案,以便 mehdix_ 可以关闭问题:-)
-
@tom,你能解释一下吗?你上面提到的情况会发生什么?
-
@mehdix_ 如果
m1 /= m2(例如madd (Mod 1 4) (Mod 2 5))由于模式匹配失败会出现运行时错误,因为m1 == m2为假。
标签: haskell