Haskell编写守卫代码报parse error on input ‘|’如何修复
Haskell守卫报
parse error on input ‘|’修复方案 错误根源
这个报错和let语法没有关系,是守卫的书写格式不符合语法规则:
- 你在函数参数列表
smallest a b后额外多写了一个=。Haskell的守卫语法中,参数列表后不需要先写等号,直接跟守卫的|即可,等号是写在每个守卫条件的后面,用来分隔条件和满足条件时的返回值。 - 原代码用
a >= b和a <= b两个条件虽然能覆盖两个数比较的所有场景,但守卫写法的惯例是最后加otherwise做兜底,避免后续修改代码时出现条件遗漏的问题。
修正后的可运行代码
smallest a b | a >= b = b | otherwise = a
如果要写在同一行也符合语法,只是可读性稍差:
smallest a b | a >= b = b | otherwise = a
额外注意点
Haskell是缩进敏感语言,同一函数下的所有守卫
|需要保持相同的缩进对齐,否则也可能触发缩进相关的解析错误。
内容的提问来源于stack exchange,提问作者ILikeCheezzz
相关产品推荐
相关产品推荐

