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

Haskell:为函数列表参数中的每个元素执行函数,haskell,ghc,ghci,Haskell,Ghc,Ghci,对此可能有一个简单的答案,但我对哈斯克尔是新手。我试图遍历一个函数参数,并使用每个列表元素调用另一个函数。我有一个函数,在给定游戏板、移动和玩家编号的情况下执行移动,并返回新的游戏板。其函数头如下所示: play :: [[Char]] -> Char -> Char -> [[Char]] play gameBoard moveDirection playerSymbol = ... 我试图从一个驱动函数调用它,该函数具有初始游戏板的参数和要在游戏板上执行的移动列表。是否有

对此可能有一个简单的答案,但我对哈斯克尔是新手。我试图遍历一个函数参数,并使用每个列表元素调用另一个函数。我有一个函数,在给定游戏板、移动和玩家编号的情况下执行移动,并返回新的游戏板。其函数头如下所示:

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
的性能更好,但是对于像这样的玩具程序,您不必担心这一点。

为列表中的每个元素调用函数,将每个调用的输出提供给下一个的输入,这就是所谓的fold。另外,请考虑将参数的顺序更改为<代码>播放< /C> >,以便可以将定义简化为<代码> GAMeMease= FoLDL(Play P)< <代码>。