haskell minimax/вложенные условия и где

Для задания мне нужно написать минимаксную функцию для Gametree, предоставленного функции (в виде дерева досок; Rose Board), и игрока, чья очередь. Однако я получаю эту ошибку об ошибке синтаксического анализа при вводе «|». Вероятно, потому, что я вложил условия и операторы where, но я не уверен, правильно ли я это сделал или это вообще возможно (или должно быть сделано по-другому):

minimax :: Player -> Rose Board -> Rose Int --Rose Int = Int :> [Rose Ints]
minimax p rb = minimax' rb p
          where minimax' (b :> [rbs]) p0 | null rbs  = result
                                                where result | p0 == p   =  1
                                                             | otherwise = -1
                                         | otherwise = 0 :> (minimax' rbs (nextPlayer p0))

Если кто-то может мне помочь, это очень ценится!

С уважением, Скайф.


person user2999349    schedule 24.09.2014    source источник
comment
Вы должны переместить внутренний where за охранниками.   -  person Zeta    schedule 24.09.2014


Ответы (1)


Самый простой способ исправить это, вероятно, использовать let вместо where:

minimax :: Player -> Rose Board -> Rose Int --Rose Int = Int :> [Rose Ints]
minimax p rb = minimax' rb p
          where minimax' (b :> [rbs]) p0 | null rbs  = let result | p0 == p   =  1
                                                                  | otherwise = -1
                                                       in result
                                         | otherwise = 0 :> (minimax' rbs (nextPlayer p0))

но вы также можете просто использовать условное выражение:

minimax :: Player -> Rose Board -> Rose Int --Rose Int = Int :> [Rose Ints]
minimax p rb = minimax' rb p
          where minimax' (b :> [rbs]) p0 | null rbs  = if p0 == p then 1 else -1
                                         | otherwise = 0 :> (minimax' rbs (nextPlayer p0))
person fjh    schedule 24.09.2014