Parsing Haskell中的语法分析
无论我尝试什么,我总是会遇到解析错误,这是非常令人沮丧的。你知道我能做些什么来解决这个问题吗? (这是tic tac toe程序的功能)Parsing Haskell中的语法分析,parsing,haskell,Parsing,Haskell,无论我尝试什么,我总是会遇到解析错误,这是非常令人沮丧的。你知道我能做些什么来解决这个问题吗? (这是tic tac toe程序的功能) play':网格->播放器->IO() 玩g p |wins O g=putStrLn“玩家O赢!\n” |wins X g=putStrLn“玩家X赢!\n” |完全g=putStrLn“这是平局!\n” |p==O=DoI do putStrLn“错误:无效移动” 玩g p [g']->播放g'(下一个p) |p==X=do putStr“玩家X正在思考…
play':网格->播放器->IO()
玩g p
|wins O g=putStrLn“玩家O赢!\n”
|wins X g=putStrLn“玩家X赢!\n”
|完全g=putStrLn“这是平局!\n”
|p==O=DoI do putStrLn“错误:无效移动”
玩g p
[g']->播放g'(下一个p)
|p==X=do putStr“玩家X正在思考…”
设gs=gp
n你的压痕似乎有问题。在“do”块中,每个操作都需要从同一列开始,如下所示:
example :: IO ()
example = do putStr "How old are you?"
age <- getLine
let reply = "You are: " ++ age
putStr reply
示例::IO()
示例=输入“你多大了?”
年龄游戏g'(下一个p)
|p==X=do putStr“玩家X正在思考…”
设gs=gp
n你的压痕似乎有问题。在“do”块中,每个操作都需要从同一列开始,如下所示:
example :: IO ()
example = do putStr "How old are you?"
age <- getLine
let reply = "You are: " ++ age
putStr reply
示例::IO()
示例=输入“你多大了?”
年龄游戏g'(下一个p)
|p==X=do putStr“玩家X正在思考…”
设gs=gp
n您遇到了什么解析错误?您必须对齐第一个do
块中的i
和大小写
(缩进后一个额外空格),第一个大小写
块中的[]
和[g']
模式(缩进后两个额外空格),第二个do
块中的putStrLn
和play'
语句(缩进后三个额外空格)。在输入大小写上不断给出错误(我根据建议更新了代码,仍然是相同的错误)是您的解析错误没有提示问题所在的行吗?是的,抱歉。这行:“case move gi p of”您得到了什么解析错误?您必须对齐第一个do
块中的i
和case
(缩进后一个额外空格)、[]
和[g']
模式(缩进后两个额外空格),第二个do
块中的putStrLn
和play'
语句(缩进后三个额外空格)。在输入大小写上不断给出错误(我根据建议更新了代码,仍然是相同的错误)是您的解析错误没有提示问题所在的行吗?是的,抱歉。这句话:“案例移动g i p of”起了作用。谢谢=)@whatscse很乐意帮忙!如果这个答案或其他任何一个已经解决了你的问题,请考虑投票表决。谢谢=)@whatscse很乐意帮忙!如果这个答案或任何其他解决了你的问题,请考虑表决它或。
| p == O = do i <- getNat (prompt p)
case move g i p of
| p == O = do i <- getNat (prompt p)
case move g i p of
play' :: Grid -> Player -> IO ()
play' g p
| wins O g = putStrLn "Player O wins!\n "
| wins X g = putStrLn "Player X wins!\n "
| full g = putStrLn "It' s a draw!\n "
| p == O = do i <- getNat (prompt p)
case move g i p of
[] -> do putStrLn "ERROR: Invalid move";
play' g p
[g'] -> play g' (next p)
|p == X = do putStr "Player X is thinking... "
let gs = bestmoves g p
n <- randomRIO (0, length gs - 1)
play (gs !! n) (next p)