1

我是 Haskell 的新手,并试图组合一个简单的函数来检查两个数字是否相等。这可以编译,但是当我尝试对该程序进行测试时,它说这不是详尽的。我不明白布尔函数如何不详尽?提前致谢:

data Value = ConstInt Int
           | Numequal Value Value
           | Ctrue Bool
           | Cfalse Bool
            deriving (Read, Show)
eval:: Value -> Bool

eval (Numequal e1 e2) =
   let x = eval e1
       y = eval e2
         in case (x, y) of
            (i1, i2)  -> 
                if x == y
                then False
                else True
4

3 回答 3

5

你还没有完成你的eval功能。例如,假设我调用eval (ConstInt 34). 它应该返回什么?

另外,想想你的函数体中有什么。eval返回一个布尔值,因此两者xy都将是布尔值,您正在测试它们是否相等。那是你要的吗?

于 2011-06-22T22:03:28.433 回答
4

使用模式匹配时,您必须处理所有可能的情况。

eval (Numequal e1 e2) = ...
eval _ = False -- or patterns for ConstInt, Ctrue and Cfalse
于 2011-06-22T21:58:18.580 回答
0

据我所知,您的数据类型应该是deriving (Eq)让您能够对其进行比较。

于 2011-06-22T21:53:26.977 回答