井字游戏枚举器的结果不正确

问题描述

|| 以下代码应评估井字游戏中的所有可能游戏,并将结果作为列表返回
data Piece = Naught | Cross deriving (Show,Eq)
data Result = Win | Lose | Draw deriving (Show,Eq)
type Board = Array Integer (Maybe Piece)

emptyBoard :: Board
evaluateBoard :: Board -> (Maybe Result)
allPossibleMoves :: Board -> [Board]

walkPaths :: Bool -> Board -> [Result]
walkPaths inv b = 
    if result /= nothing
        then [fromJust result]
        else concat $ map (walkPaths (not inv)) (allPossibleMoves $ invertBoard b)
    where 
        result = if inv then invertResult evald else evald
        evald = evaluateBoard b 

allGamesResults = walkPaths False emptyBoard
这给了我(先走赢/输): 总计:255168 赢:77904 输:131184 抽奖:46080 如果这些结果是正确的(我找不到任何数据可以用来验证我的数据),为什么第一个搬家的人不会赢得更多的胜利? 更新: 源代码可以在这里找到     

解决方法

        首先移动的玩家有更多选项可供选择,因为棋盘是空的,并且“坏”选项比“好”选项更多。因此,如果考虑所有可能的情况,第一个玩家将输掉更多钱。     ,        感谢freenode上#haskell的scree提供的答案:
if result /= Nothing
    then [fromJust result]
    else concat $ map (walkPaths (not inv)) (map invertBoard $ allPossibleMoves b)