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
代替。