Haskell `变量不在简单函数的作用域`中
考虑下一段代码-Haskell `变量不在简单函数的作用域`中,haskell,Haskell,考虑下一段代码- pvp::Board->Int-> IO () pvp board player = do player1choice <- prompt $ ("Player " ++ (show (player + 1)) ++ ", it's your turn:") if player == 0 then let newboard = (put board X (read player1choice)) in newboard else
pvp::Board->Int-> IO ()
pvp board player = do
player1choice <- prompt $ ("Player " ++ (show (player + 1)) ++ ", it's your turn:")
if player == 0
then let newboard = (put board X (read player1choice)) in newboard
else let newboard = (put board O (read player1choice)) in newboard
case newboard of
Nothing -> putStrLn "Invalid move."
Just board' -> putStrLn "Valid move."
pvp::Board->Int->IO()
pvp棋盘玩家=do
玩家1选择“无效移动”
只要登上“->putStrLn”有效移动。“
对于
案例newboard of
,我得到错误:变量不在范围内:newboard::可能是a0
。这是什么原因?因为我没有完整的haskell文件,所以我只能给出一个有根据的猜测-但是你只有在的范围内才有newboard,如果。。然后。。else
表达式
假设put
返回一个新的Board
,并且与状态无关,则这应该是正确的:
pvp :: Board -> Int -> IO ()
pvp board player = do
player1choice <- prompt $ ("Player " ++ (show (player + 1)) ++ ", it's your turn:")
let newboard = if player == 0
then put board X (read player1choice)
else put board O (read player1choice)
case newboard of
Nothing -> do
putStrLn "Invalid move."
-- playGame b
Just board' -> putStrLn "Valid move."
pvp::Board->Int->IO()
pvp棋盘玩家=do
玩家1选择做什么
putStrLn“无效移动。”
--游戏b
只要登上“->putStrLn”有效移动。“
注意(与您的问题无关)
你应该避免read
如果有人输入一个无效的输入,它会使你的程序崩溃——比如说一个你期望数字的字母。更好地使用因为我没有完整的haskell文件,所以我只能给出一个有根据的猜测-但是你只有在的范围内使用newboard,如果。。然后。。else
表达式
假设put
返回一个新的Board
,并且与状态无关,则这应该是正确的:
pvp :: Board -> Int -> IO ()
pvp board player = do
player1choice <- prompt $ ("Player " ++ (show (player + 1)) ++ ", it's your turn:")
let newboard = if player == 0
then put board X (read player1choice)
else put board O (read player1choice)
case newboard of
Nothing -> do
putStrLn "Invalid move."
-- playGame b
Just board' -> putStrLn "Valid move."
pvp::Board->Int->IO()
pvp棋盘玩家=do
玩家1选择做什么
putStrLn“无效移动。”
--游戏b
只要登上“->putStrLn”有效移动。“
注意(与您的问题无关)
你应该避免read
如果有人输入一个无效的输入,它会使你的程序崩溃——比如说一个你期望数字的字母。更好地使用阅读此内容可能会有所帮助:阅读此内容可能会有所帮助:感谢您花时间回答我的问题,但通过此修复,我没有从文字“1”(第4行)中获得(Num String)的实例。我不知道第4行是什么,您需要显示整个文件,否则我帮不了您。不过,这是一个与当前问题无关的问题-最好为这个问题打开一个新的问题。我的意思是,正如我所说,我不能帮助你董事会,我也不知道放置和提示的定义。谢谢你花时间回答我的问题,但是在这个修复中,我没有从文本“1”中得到(Num String)的实例(第4行),我不知道第4行是什么,你需要显示整个文件,否则我帮不了你。不过,这是一个与当前问题无关的问题-最好为这个问题打开一个新的问题。我是说,正如我所说,我不能帮助你板我也不知道放置和提示的定义。