解析Haskell代码中的错误,无法找出原因

时间:2019-03-31 14:15:46

标签: haskell

已更新:已删除与错误无关的代码,因为这是家庭作业,其他学生可能会看到。

我正在从事一项家庭作业,该作业使用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

1 个答案:

答案 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中没有逗号运算符。目前尚不清楚您要在这里做什么。

还有很多其他错误,但这应该可以帮助您入门。