解析模式中的错误

时间:2014-03-24 07:48:17

标签: haskell parse-error

count a []       = 0
count a (b:xs) = c + count a xs
  where c = case b of
          (b==a) -> 1
          (b/=a) -> 0

GHCI在模式中给出错误"解析错误:b == a"

我想知道为什么会出现这种解析错误。

谢谢。

2 个答案:

答案 0 :(得分:3)

a == b不是一种模式,它是一种表达方式。正如另一个答案所说,这样的事情会起作用:

case a == b of
  True  -> 1
  False -> 0

但这可以更简单地写成

if a == b then 1 else 0

也许你在考虑模式守卫?

case a of
  junk | a == b -> 1
       | a /= b -> 0

一般来说,Haskell提供了许多不同的方法来进行条件分支,因此找出你需要的方法可能很困惑。 模式通常用于根据存在的构造函数决定,要将构造函数的某个字段提取到某个变量中。对于比较值,通常需要if-expression。

答案 1 :(得分:1)

这是因为你所拥有的不是模式匹配,这是case of正在做的事情。如果我没有弄错的话,你只能在那里拥有数据类型构造函数而不是实际的函数。

如果您尝试了类似

的内容
count a (b:xs) = c + count a xs
  where c = case b == a of
      True -> 1
      False -> 0

它会起作用,但最好还是使用if b == a then 1 else 0代替。