控制语句中的 Haskell 解析错误(可能是不正确的缩进或不匹配的括号)



我正在尝试让一些东西工作,它是为了一个游戏。我遇到了一个无法追踪的解析错误。

getLineDir :: (Int, Int) -> Piece -> Board -> [Piece]
getLineDir (x,y) (Piece (x',y') player) board 
            | pieceAt(x'+ x, y'+ y) board == Nothing = []
            | if pieceAt(x'+ x, y'+ y) board == Just (Piece _ player') && isPlayer player (Piece _ player') == True then (Piece (x',y') player):[] else (Piece _ player'): getLineDir (x,y) (Piece (x'+x, y'+y) player) board
flippable :: [Piece] -> [Piece]

我收到的错误消息是:

解析错误(可能是不正确的缩进或不匹配的括号)

我在以"可翻转"开头的行处收到解析错误,所以我猜测前一行有问题。

您不能将==Just (Piece _ player') 这样的模式一起使用。您需要像case一样进行适当的模式匹配。

getLineDir :: (Int, Int) -> Piece -> Board -> [Piece]
getLineDir (x,y) (Piece (x',y') player) board =
   case pieceAt (x'+ x, y'+ y) board of
   Nothing -> []
   Just piece@(Piece _ player')
     | isPlayer player piece -> [Piece (x',y') player]
     | otherwise -> piece : getLineDir (x,y) (Piece (x'+x, y'+y) player) board

也许,Just piece@(Piece _ player')可以简单地替换为 Just piece ,因为在那之后你永远不需要player'

下面呢?

getLineDir :: (Int, Int) -> Piece -> Board -> [Piece]
getLineDir (x, y) (Piece (x', y') player) board 
            | pieceAt(x'+ x, y'+ y) board == Nothing = []
            | pieceAt(x'+ x, y'+ y) board == Just (Piece _ player') && isPlayer player (Piece _ player') == True = (Piece (x', y') player) : [] 
            | otherwise  = (Piece _ player') : getLineDir (x,y) (Piece (x'+ x, y'+ y) player) board

最新更新