解析模式错误


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

GHCI给出错误"Parse error in pattern: b == a"

我想知道为什么这个解析错误发生。

谢谢。

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表达式。

发生这种情况是因为您在那里没有模式匹配,这是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代替。

相关内容

  • 没有找到相关文章

最新更新