Haskell:为函数列表参数中的每个元素执行函数



这个问题可能有一个简单的答案,但我是Haskell的新手。我正在尝试迭代一个函数参数,并使用每个列表元素来调用另一个函数。我有一个函数,在给定游戏板、移动和玩家编号的情况下执行移动,并返回新的游戏板。它的函数头看起来像这样:

play :: [[Char]] -> Char -> Char -> [[Char]]
play gameBoard moveDirection playerSymbol = ...

我试图从一个驱动程序函数调用它,该函数具有初始游戏板的参数和要在游戏板上执行的动作列表。有没有办法为移动列表中的每个元素调用play函数,以便下面的gameExample函数在每次移动后返回游戏板?

moveDirections = "udlrudlr"
gameExample :: [[Char]] -> [Char] -> [[Char]]
gameExample gameBoard (moveDirection : moveDirections) = 
play gameBoard moveDirection 'p'

如果你需要任何澄清,请告诉我。

您可以使用显式递归:

gameExample gameBoard [] = gameBoard
gameExample gameBoard (moveDirection : moveDirections) =
gameExample (play gameBoard moveDirection 'p') moveDirections

或者,您可以使用foldl函数为您执行以下操作:

gameExample = foldl (gameBoard moveDirection -> play gameBoard moveDirection 'p')

还有Data.Foldable.foldl',它通常比foldl的性能更好,但对于像这样的玩具程序,您不需要担心这一点。

相关内容

  • 没有找到相关文章

最新更新