我正在学习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)
Run Code Online (Sandbox Code Playgroud)
IO [Int]在你的基础案例中你需要一个:
intArray 0 = return []
Run Code Online (Sandbox Code Playgroud)
并且您需要更改return递归情况以使用正确的优先级:
return (int:nextInt)
Run Code Online (Sandbox Code Playgroud)
顺便说一下,[Int]是一个单独链接的整数列表,而不是一个数组.您还可以使用replicateMControl.Monad 简化您的功能:
import Control.Monad
intArray i = replicateM i (fmap read getLine)
Run Code Online (Sandbox Code Playgroud)