我试图在Haskell的警卫内部使用警卫时遇到了问题,我试着发现是否可以甚至这样做,但我找不到任何答案在互联网上,我希望你们知道答案。这是在试图编译我的代码,我发现了错误: Assignment2.hs:134:75: parse error on input '|'
我可以在Haskell的警卫内部使用警卫吗
我的代码:
verticals :: Board -> (Row, Row, Row)
verticals ((a,b,c),(d,e,f),(g,h,i)) = ((a,d,g),(b,e,h),(c,f,i))
symbolToPlayer :: Field -> Player
symbolToPlayer X = P1
symbolToPlayer O = P2
showTime :: Board -> Maybe Player
showTime ((a,b,c),(d,e,f),(g,h,i))
| a==b && a==c = Just (symbolToPlayer a)
| d==e && d==f = Just (symbolToPlayer d)
| g==h && g==i = Just (symbolToPlayer i)
| otherwise = False
hasWinner :: Board -> Maybe Player
hasWinner [email protected]((a,b,c),(d,e,f),(g,h,i))
| showTime b -> spot of error
| showTime (verticals b)
| a==e && a==i = Just (symbolToPlayer a)
| c==e && c==g = Just (symbolToPlayer c)
| otherwise = Nothing
的代码是井字棋的比赛中,这部分代码是应该找出哪个球员赢了;类型Board是自定义的,输入示例:hasWinner((X,O,X),(X,O,O),(X,X,O))(输出应该是:只是P1)。
感谢您的帮助!
您是否检查过所有的空格是空格而不是制表符?此外,该函数的赢家是' - >'而不是'=' – DiegoNolan
我想知道你为什么期望这样编译,以及它应该如何工作。显然你想以某种方式评估'showTime'的'Maybe'结果? – leftaroundabout