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"
我想知道为什么会出现这种解析错误。
谢谢。
答案 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
代替。