已更新:已删除与错误无关的代码,因为这是家庭作业,其他学生可能会看到。
我正在从事一项家庭作业,该作业使用haskell玩四人棋。提供了游戏板以及包含动作的列表。我是Haskell的新手,我不明白为什么在第20行出现解析错误。我在完成检查连接4的代码时也遇到了问题,因此对这两个问题中的任何一个的任何帮助都会非常感谢。
我得到的错误是:
:20:40: error :
parse error on input ‘=’
Perhaps you need a 'let' in a 'do' block?
e.g. 'let x = 5' instead of 'x = 5'
在以下代码中,导致错误的行用注释标记:
onePlayerManyMoves :: [[Char]] -> [Int] -> [[Char]]
onePlayerManyMoves :: [[Char]] -> [Int] -> [[Char]]
onePlayerManyMoves [] _ = []
onePlayerManyMoves game [] = game -- **parse error here**
if connectFour
onePlayerManyMoves game (move:moves) = game
else
onePlayerManyMoves game (move:moves) = play game '1' move, onePlayerManyMoves game (move:moves) = game moves
where connectFour = checkFour game
答案 0 :(得分:3)
忽略源代码中的虚假```。让我们看一下这些行:
if connectFour
onePlayerManyMoves game (move:moves) = game
else
onePlayerManyMoves game (move:moves) = play game '1' move, onePlayerManyMoves game (move:moves) = game moves
条件不是在Haskell中的工作方式。首先,它是一个 expression 。没有声明,没有声明,没有别的。一种表达。 (还有then
关键字,它不是可选的)。您不能有这样的条件模式绑定。您需要一个条件表达式:
onePlayerManyMoves game (move:moves) = if connectFour then ... else ...
接下来,让我们看一下else
分支中的内容。
play game '1' move, onePlayerManyMoves game (move:moves) = game moves
我不知道这可能意味着什么。 Haskell中没有逗号运算符。目前尚不清楚您要在这里做什么。
还有很多其他错误,但这应该可以帮助您入门。