我有一個 Foos 陣列:
myArray :: Array Int Foo
我想使用類似于以下的功能從左到右“掃描”它:
getNextStep :: Bar -> Foo -> Bar
我想掃描 myArray 以生成 Bars 陣列:
scanl :: (Bar -> Foo -> Bar) -> Bar -> Array Int Foo -> Array Int Bar
是的,這和前奏曲很相似scanl。但是有陣列的版本嗎?我可以用例如 Traversable 構建一個嗎?謝謝
uj5u.com熱心網友回復:
mapAccumL適用于任何 Traversable。它比掃描更通用一點,但是如果您使用發出未更改狀態值的階躍函式,您或多或少會再次獲得掃描。
> mapAccumL (\s x -> (s x, s)) 0 [1,2,3,4]
(10,[0,1,3,6])
如果您希望像使用 scanl 一樣包含最后一個元素,則必須將其添加回陣列中。Traversables 通常沒有辦法添加元素,所以我們不能讓它對任何 traversables 起作用。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/517135.html
標籤:哈斯克尔
