我不太了解以下代码:
game :: ([Move], Towers) -> Towers
game ([], towers) = towers
game situation = game (move situation)
situation
这里没有提及代码的任何部分(在此之前有一个长代码,称为河内塔,我想很多人都知道它)。
为什么我们可以直接在这里使用situation
?我知道这是正确的,代码工作得很好,但我不知道为什么。
答案 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
。