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
相关产品推荐
相关产品推荐

