【发布时间】:2023-09-13 12:22:01
【问题描述】:
我在 Haskell 的守卫中尝试使用守卫时遇到了一个问题,我试图找出是否(不可能)这样做,但我在互联网上找不到任何答案,我希望你小伙伴们可能知道答案了。这是我在尝试编译代码时遇到的错误:
Assignment2.hs:134:75: parse error on input '|'
我的代码:
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 b@((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))(输出应为:Just P1)。
感谢您的帮助!
【问题讨论】:
-
您是否检查过所有的空格都是空格而不是制表符?该函数的获胜者也是
->而不是= -
我想知道您为什么希望它编译,以及它应该如何工作。显然你想以某种方式评估
showTime的Maybe结果?