gpt4 book ai didi

haskell - Haskell 中 "Looping"IO 的问题

转载 作者:行者123 更新时间:2023-12-04 09:04:28 25 4
gpt4 key购买 nike

我是 Haskell 的新手,所以我正在尝试制作一个简单的基于文本的两人游戏,以帮助我学习它。

但是,我遇到了在“循环”中执行 IO 的问题。据我所知,从用户输入设置的变量不能使用,除非它们设置在 main.h 中。这是一个问题,因为对 main 的递归调用对我来说毫无用处,因为 main 不接受任何参数。理想情况下,我会有一个从 main 调用的函数,它会调用自己,直到一个玩家输掉。但是,这似乎不起作用,因为使用用户输入在该函数中设置的任何变量都会导致类型错误。

该程序的结构如下:

*提示玩家 1 输入名称并设置 player1 变量。

*提示播放器 2 输入名称并设置播放器 2 变量。

*“循环”:在每个玩家之间交替,提示命令直到一个玩家输掉。

解决这个问题的最佳方法是什么?

最佳答案

Ideally, I would have a function called from main that calls itself until one player loses. But, this does not seem to work, since using any variables set in that function by user input results in type errors.



这是完全可能的。下次请包含一些代码,以便我们可以帮助您解决您的误解。这是一个示例代码片段:
import System.IO

处理缓冲问题。
main = do
hSetBuffering stdin NoBuffering
putStrLn "Gimma a name ye skervy dog!"
name1 <- getLine
putStrLn "Good, Good, now another, and make it snappy!"
name2 <- getLine
loop name1 name2 10

通知 main可以调用另一个存在于 IO monad 中的函数 ( loop)。这个其他函数完全能够获取用户输入并对其进行操作、调用自身和/或获取参数。
loop :: String -> String -> Int -> IO ()
loop _ _ 0 = return ()
loop n1 n2 i = do
putStrLn $ "Ok Mr. " ++ n1 ++ " and Mrs. " ++ n2 ++
" tis time to roll the dice!"
print i
putStrLn "Options: (k)eep looping, (i)ncrement loop counter by 10"
c <- getChar
putStr "\n"
case c of
'k' -> loop n1 n2 (i-1)
_ -> putStrLn "Blood and bloody ashes, we have to keep going?" >>
loop n1 n2 (i+10)

而循环只是做一个简单愚蠢的工作,要求一个二进制输入(增加或不增加计数器),而且,循环。

如果这没有帮助,那么也许您可以发布更完整的问题和代码。我将使用更新的答案进行编辑。

关于haskell - Haskell 中 "Looping"IO 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6785751/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com