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

Haskell报parse error on input `list'解析错误如何解决

修复方案

你的代码总共有四个问题,改完就能正常运行:

  • 第一个是缩进错误:Haskell顶层的定义必须顶格写,你给list、inv开头加了多余空格,直接触发parse error on input 'list'的解析报错。
  • 第二个是函数调用逻辑错:你写的print inv (list)不符合Haskell的函数调用规则,Haskell函数调用优先级最高、默认左结合,这行代码会被解析成先执行print inv,再把list当参数传给print的返回值,完全不是你要的效果;而且你要给列表每个元素取倒数,不能直接把整个列表传给inv,得用map把inv逐个作用到列表元素上。
  • 第三个是数学逻辑错:对数的底数不能为1,你列表推导式里a从1开始取值,logBase 1 b是无意义的,会算出无穷大或者非数值,这就是你逐行输入时list结果异常的原因。另外你写的[1,2..]是无穷列表,虽然有小于100的守卫条件,但直接写有限范围更稳妥,避免求值时出现意外卡死的问题。
  • 第四个是入口缺失:直接编译运行Haskell源码文件必须定义main函数作为执行入口,不能在顶层直接写执行语句。

修复后的完整可运行代码如下:

import Data.List
import System.IO

list = [logBase a b | a <- [2..99], b <- [2..99]]
inv x = 1 / x

main :: IO ()
main = print $ map inv list

代码里用map inv list生成所有元素取倒数后的新列表,$用来调整函数应用优先级,等价于print (map inv list),直接运行就能输出正确结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 11:30:54