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

在Haskell中打印整数列表时为何出现‘Prelude.read: no parse’错误?

问题原因

Haskell的read函数对输入格式有严格要求,解析[Int]类型时,必须符合Haskell列表的语法规范——带方括号包裹,元素用逗号分隔(比如[2,4,6,8])。你输入的2 4 6 8是空格分隔的数字串,不符合read的解析规则,因此触发Prelude.read: no parse错误。

解决方法

方法1:修改输入格式

直接按Haskell列表语法输入,比如输入:

[2,4,6,8]

原代码即可正常运行,输出为:

The entered list is: [2,4,6,8]

方法2:修改代码适配空格分隔输入

如果希望支持空格分隔的输入格式,可将输入字符串拆分后逐个转换为整数,代码如下:

main = do
    putStrLn "Enter a list of integers:"
    input <- getLine
    let xs = map read (words input) :: [Int]
    putStr "The entered list is: "
    print xs
  • words input将输入字符串按空格拆分为单个数字的字符串列表(如"2 4 6 8"转为["2","4","6","8"])
  • map read把每个字符串转换为Int类型,最终得到[Int]列表

方法3:适配预期输出格式

如果想要输出是空格分隔的形式(而非Haskell默认的带方括号格式),可调整输出逻辑:

main = do
    putStrLn "Enter a list of integers:"
    input <- getLine
    let xs = map read (words input) :: [Int]
    putStr "The entered list is: "
    putStrLn $ unwords (map show xs)

此时输入2 4 6 8,输出将完全符合你的预期:

The entered list is: 2 4 6 8

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 01:12:08