You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 13:39:16