Haskell中的递归函数“游戏”

时间:2015-05-06 15:42:13

标签: haskell

我不太了解以下代码:

game :: ([Move], Towers) -> Towers
game ([], towers) = towers
game situation = game (move situation)

situation这里没有提及代码的任何部分(在此之前有一个长代码,称为河内塔,我想很多人都知道它)。 为什么我们可以直接在这里使用situation?我知道这是正确的,代码工作得很好,但我不知道为什么。

1 个答案:

答案 0 :(得分:4)

situation是函数game的参数。它的类型为([Move], Towers)。基本上,你所说的是"如果situation没有移动则返回塔,否则执行移动然后将结果传递给game"。

将此功能写为

是完全合法的
game ([], towers) = towers
game (moves, towers) = game (move (moves, towers))

但是这需要拆分一个元组然后构造一个完全相同的新元组,或者你可以使用任何其他名称来表示这个值:

game ([], towers) = towers
game foobar = game (move foobar)

它只不过是函数game的参数的名称,它实际上被称为什么并不重要(只要它不是一个保留关键字,当然,您无法为其命名import