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

Haskell中阶乘定义出现Parse error错误的原因咨询

Haskell阶乘代码解析错误原因及修复

错误原因

你写的fac (n + 1)属于n+k模式,这是GHC的非标准扩展语法,Haskell默认不支持这种在模式中使用中缀运算的写法,所以不管用哪种类型签名,都会触发解析错误。

修复方案

方案1:启用GHC扩展(不推荐长期使用)

在代码最顶部添加扩展声明,打开n+k模式支持:

{-# LANGUAGE NPlusKPatterns #-}

fac :: Integer -> Integer
fac 0 = 1
fac (n + 1) = (n + 1) * fac n

注:该扩展在新版GHC中已被标记为过时,仅用于兼容旧代码场景。

方案2:使用标准Haskell语法(推荐)

用变量模式结合守卫判断,或直接递归调用时做减法,这是标准写法,兼容性更好:

-- 支持Num类型的版本(需Ord约束做边界判断)
fac :: (Num a, Ord a) => a -> a
fac 0 = 1
fac n | n > 0 = n * fac (n - 1)

-- 仅支持Integer的简化版本
fac :: Integer -> Integer
fac 0 = 1
fac n = n * fac (n - 1)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 04:35:05