Haskell递归函数累加器操作报错,求解析错误原因
错误原因分析
在Haskell中,列表构造运算符:的语法规则是**单个元素:列表**,它的作用是将单个元素添加到一个列表的头部,运算符左侧必须是单个元素,右侧必须是列表。
你代码第4行的(acc:x)违反了这个规则:acc是一个列表(初始调用时传入的是[],后续递归中也始终是列表类型),而x是单个元素。GHC会因为类型不匹配抛出错误——它期望:左侧是单个元素,但你传入了一个列表。
如果要修正这个语法问题,只需要把acc:x改成x:acc,这样就符合:的构造规则了:
start list = start' list [] where start' (x:[]) acc = acc start' (x:xs) acc = start' xs (x:acc)
(注:这个修正后的代码会返回原列表除最后一个元素的逆序,如果你需要正序结果,还需要对acc做反转操作,但这不属于你当前提问的错误范畴)
内容的提问来源于stack exchange,提问作者Tay
相关产品推荐
相关产品推荐

