【发布时间】:2013-03-05 05:36:30
【问题描述】:
我正在尝试以这种格式打印出一个整数列表
[1]
[2]
[3]
所以我的函数接受一个整数列表并返回一个 IO (),如下所示:
import System.IO
printVector :: [Integer] -> IO ()
printVector (x:xs) = putStr("[" ++ show(x) ++ "]" ++ "\n") : printVector xs
但是 ghc 给了我错误:
lin-test.hs:5:22:
Couldn't match expected type `IO ()' with actual type `[a0]'
In the expression:
putStr ("[" ++ show (x) ++ "]" ++ "") : printVector xs
In an equation for `printVector':
printVector (x : xs)
= putStr ("[" ++ show (x) ++ "]" ++ "") : printVector xs
Failed, modules loaded: none.
现在我的理解是,该函数将遍历列表,首先获取第一个项目“x”,然后使用 : printVector xs 它将递归调用列表的其余部分,将相同的 putStr 函数应用于每个项目列表。
但我认为我的问题出在哪里:printVector xs? 谁能指出我在这里做错了什么?
【问题讨论】:
-
最简单的更改:
>> printVector xs而不是: printVector xs。