我正在学习Haskell,我希望用户在控制台中输入x数字,并将这些数字存储在数组中,然后传递给我的函数。
不幸的是,无论我尝试什么它都不起作用,这是我的代码:
-- Int Array
intArray :: Int -> IO [Int]
intArray 0 = []
intArray x = do
str <- getLine
nextInt <- intArray (x - 1)
let int = read str :: Int
return int:nextInt
-- Main Function
main = do
array <- intArray 5
putStrLn (show array)
答案 0 :(得分:7)
您的基本情况需要IO [Int]
:
intArray 0 = return []
您需要更改递归案例中的return
以使用正确的优先级:
return (int:nextInt)
另外,[Int]
是一个单独链接的整数列表,而不是一个数组。您还可以使用Control.Monad中的replicateM
来简化您的功能:
import Control.Monad
intArray i = replicateM i (fmap read getLine)