Haskell:对函数列表参数中的每个元素执行函数
Haskell: Perform function for each element in function list parameter
这个问题可能有一个简单的答案,但我是 Haskell 的新手。我正在尝试遍历一个函数参数并使用每个列表元素来调用另一个函数。我有一个功能,可以在给定游戏板、移动和玩家编号以及 returns 新游戏板的情况下执行移动。它的函数头如下所示:
play :: [[Char]] -> Char -> Char -> [[Char]]
play gameBoard moveDirection playerSymbol = ...
我正在尝试从具有初始游戏板参数和要在游戏板上执行的移动列表的驱动程序函数中调用它。有没有一种方法可以为移动列表中的每个元素调用 play
函数,以便在每次移动后 return 游戏板下方的 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
的性能更好,但对于像这样的玩具程序,您不必担心这一点。
这个问题可能有一个简单的答案,但我是 Haskell 的新手。我正在尝试遍历一个函数参数并使用每个列表元素来调用另一个函数。我有一个功能,可以在给定游戏板、移动和玩家编号以及 returns 新游戏板的情况下执行移动。它的函数头如下所示:
play :: [[Char]] -> Char -> Char -> [[Char]]
play gameBoard moveDirection playerSymbol = ...
我正在尝试从具有初始游戏板参数和要在游戏板上执行的移动列表的驱动程序函数中调用它。有没有一种方法可以为移动列表中的每个元素调用 play
函数,以便在每次移动后 return 游戏板下方的 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
的性能更好,但对于像这样的玩具程序,您不必担心这一点。