簡體   English   中英

Haskell:為函數列表參數中的每個元素執行函數

[英]Haskell: Perform function for each element in function list parameter

對此可能有一個簡單的答案,但我是 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更好,但是對於像這樣的玩具程序,您無需擔心這一點。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM