【发布时间】:2020-11-27 06:09:01
【问题描述】:
我有一个代码可以创建一个列表然后随机播放它。但我无法执行,因为main = do 部分中的= 有问题。错误是"parse error on input"。
这是代码:
import System.IO
import System.Random
shuffle :: [a] -> [a]
shuffle list = if length list < 2 then return list else do
i <- randomRIO (0, length list-1)
r <- shuffle (take i list ++ drop (i+1) list)
return (list!!i : r)
main = do --the problem is in this line
putStrLn "Enter the number:"
number <- getLine
let n = (read number :: Int)
let list = [1..n]
print list
shuffle list
【问题讨论】:
-
do中的shuffle没有多大意义。列表确实是 monad 类型类的一个实例,但这里return是一个列表,所以基本上这是列表中的一个列表。 -
除非你的函数返回
IO someType,否则你不能做IO。此外,您在main中忽略了shuffle list的结果,因此您不会看到任何打乱的列表。可能还有其他问题。 -
我已回滚您的编辑,因为它们已使现有答案无效。如果您对新修改的代码有新问题,请发布一个新问题,如有必要,可能包括返回此问题的链接作为背景。
标签: haskell random io main shuffle