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

Haskell无守卫实现帕斯卡三角取值函数,修复if表达式语法报错

Haskell 帕斯卡三角代码修复指南

存在的问题

  • 语法错误:函数定义参数列表后缺失等号。Haskell 中无守卫的函数定义必须遵循 函数名 参数列表 = 函数体 的格式,原代码中 pascal row pos 后直接跟 if 表达式,编译器会将 if 识别为传入函数的参数,因此触发意料之外的 if 表达式报错。
  • 类型不匹配错误:函数签名声明返回值为 Int 类型,但边界条件分支返回了字符串 "1",需要改为数值 1。
  • 逻辑错误:合法性判断规则写反。需求是 pos 必须小于等于 row,因此只有当 pos > row 时才需要抛出非法输入错误,原代码的 row > pos 判断会直接拦截所有合法输入。
  • 边界逻辑缺失:帕斯卡三角每行最后一个元素(pos == row)的值固定为 1,缺少该判断会导致合法的末尾位置查询递归到非法参数报错。

修复后的完整代码

pascal :: Int -> Int -> Int
pascal row pos =
        if row == 0 || pos == 0 || pos == row then 1
        else if pos > row then error "Invalid input."
        else pascal (row-1) (pos-1) + pascal (row-1) pos

验证效果

调用 pascal 2 1 会返回预期结果 2,调用 pascal 3 4 会抛出非法输入错误,完全符合需求。

内容的提问来源于stack exchange,提问作者Plex

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 00:36:06