Haskell 如何使用在另一个do块中生成的值?
我刚刚在Haskell上看了一段视频,所以我试着用它来播放一点,但我无法理解这一点(简而言之,我想打印一个随机值):Haskell 如何使用在另一个do块中生成的值?,haskell,Haskell,我刚刚在Haskell上看了一段视频,所以我试着用它来播放一点,但我无法理解这一点(简而言之,我想打印一个随机值): 看起来你需要的是 randomNum = do gen <- newStdGen return (head (randoms gen :: [Int])) writeToFile = do theFile <- openFile "test.txt" WriteMode val <- randomNum hPutStrLn
看起来你需要的是
randomNum = do
gen <- newStdGen
return (head (randoms gen :: [Int]))
writeToFile = do
theFile <- openFile "test.txt" WriteMode
val <- randomNum
hPutStrLn theFile ("Random number " ++ show val)
hClose theFile
randomNum=do
gen看起来你需要的是
randomNum = do
gen <- newStdGen
return (head (randoms gen :: [Int]))
writeToFile = do
theFile <- openFile "test.txt" WriteMode
val <- randomNum
hPutStrLn theFile ("Random number " ++ show val)
hClose theFile
randomNum=do
gen您可以尝试以下方法:
import System.Random
import System.IO
writeToFile = do
gen <- newStdGen
let ns = randoms gen :: [Int]
let val = head ns;
theFile <- openFile "test.txt" WriteMode
hPutStrLn theFile ("Random number " ++ show val)
hClose theFile
readFromFile = do
theFile2 <- openFile "test.txt" ReadMode
contents <- hGetContents theFile2
putStr contents
hClose theFile2
导入系统。随机
导入系统.IO
writeToFile=do
gen您可以尝试以下方法:
import System.Random
import System.IO
writeToFile = do
gen <- newStdGen
let ns = randoms gen :: [Int]
let val = head ns;
theFile <- openFile "test.txt" WriteMode
hPutStrLn theFile ("Random number " ++ show val)
hClose theFile
readFromFile = do
theFile2 <- openFile "test.txt" ReadMode
contents <- hGetContents theFile2
putStr contents
hClose theFile2
导入系统。随机
导入系统.IO
writeToFile=do
gen您得到了什么错误?Prelude>:r[1/1]编译Main(haskell.hs,已解释)haskell.hs:207:48:无法将[Char]'的第二个参数中的预期类型与实际类型
IO(),即hPutStrLn'的第二个参数中的
randomNum',即
(“Random number”++randomNum)失败,加载的模块:无。如果您只需要一个值,您可以只写val,会出现什么错误?Prelude>:r[1/1]编译Main(haskell.hs,已解释)haskell.hs:207:48:无法将预期的类型[Char]'与实际类型
IO()在(++)的第二个参数中,即randomNum',在hPutStrLn的第二个参数中,即(“Random number”+++randomNum)”失败,加载的模块:无。如果您只需要一个值,您只需编写val即可。我尝试了它,得到了“无法将IO()类型与IO匹配”()->IntIt给了我一个错误,但是它太长了,无法发表评论。我很确定您想要show val
而不是show randomNum
。函数通常不会很好地显示…使用此解决方案时,错误是Prelude>:r[1/1]编译Main(haskell.hs,已解释)haskell.hs:207:44:没有因在
(++)的第二个参数中使用show'而产生的(show(IO Int))实例,即
hPutStrLn'的第二个参数中的show randomNum',即“do”块的stmt中的“(“Random number”++show randomNum”):hPutStrLn文件(“Random number”++show randomNum)失败,加载的模块:无。序曲>那是由@recursion.ninja的编辑修复的;它是show val
,而不是show randomNum
。我尝试了它,得到了“无法将IO()类型与IO()匹配->IntIt给我一个错误,但它太长,无法进行注释。我很确定您希望show val
而不是show randomNum
。函数通常显示不太好…使用此解决方案时,错误是前奏>:r[1/1]编译Main(haskell.hs,已解释)haskell.hs:207:44:由于在
(++)的第二个参数中使用了Show',即在
hPutStrLn的第二个参数中使用Show randomNum',即`(“随机数”++Show randomNum),因此没有(Show(IO Int))的实例'在'do'块的stmt中:hPutStrLn文件(“随机数”++显示随机数)失败,加载的模块:无。Prelude>该WW由@recursion.ninja的编辑修复;它是show val
,而不是show randomNum
。