foldl
功能附帶嚴格的模擬foldl'
。 scanl
是不是需要scanl'
替代方案,還是沒有將它包含在標準庫中?爲什麼Haskell標準庫中沒有scanl函數?
9
A
回答
11
不需要它。 foldl'
的嚴格性允許它在遍歷輸入列表時立即消除thunk。
foldl' (+) 0 [1,2,3] foldl (+) 0 [1,2,3]
foldl' (+) 1 [2,3] foldl (+) (0 + 1) [2,3]
foldl' (+) 3 [3] foldl (+) ((0 + 1) + 2) [3]
foldl' (+) 6 [] foldl (+) (((0 + 1) + 2) + 3) []
6 (((0 + 1) + 2) + 3)
((1 + 2) + 3)
(3 + 3)
6
但是,當你這樣做scanl
它產生含有這些步驟
scanl (+) 0 [1,2,3]
[ 0
, 0 + 1
, (0 + 1) + 2
, ((0 + 1) + 2) + 3
]
而且你必須遍歷整個列表,看看最後的結果,它可以讓您控制的thunk如何強制每一個列表。這將評估的控制推向列表的消費者。
6
嗯,我不知道,如果scanl'
不需要,但它可能是一個比foldl'
非常罕見的需要,因爲你通常消耗的元素scanl
元素的結果,因而迫使它作爲你走就像foldl'
一樣。
相關問題
- 1. 爲什麼Haskell標準庫中沒有<<?
- 2. 爲什麼Haskell中沒有runConst函數?
- 3. 爲什麼C++標準庫中沒有std :: transform_n函數?
- 4. 爲什麼沒有函數在Python標準庫中讀取/寫入文件
- 5. 有沒有數字剪裁的標準Haskell函數?
- 6. 爲什麼Haskell中沒有用於函數的monoids類型?
- 7. 爲什麼Scala標準庫中的Numeric沒有`maxValue`?
- 8. 爲什麼在C++ 11標準庫中沒有std :: clear
- 9. Hibernate標準:爲什麼沒有Subqueries.isNull(DetachedCriteria)?
- 10. 在Java流中Haskell的scanl等價於什麼?
- 11. 爲什麼標準C庫沒有像realloc()沒有數據複製功能?
- 12. 爲什麼Haskell Data.ByteString.Lazy.Char8沒有解壓縮函數?
- 13. F#相當於Haskell scanl/scanr
- 14. 爲什麼有些Swift標準庫函數在操場中無法識別?
- 15. 爲什麼Haskell基礎庫中沒有「非空列表」類型?
- 16. 有沒有一個標準的庫解決這個Haskell問題?
- 17. 爲什麼vxWorks中沒有main()函數?
- 18. 爲什麼FlexUnit中沒有assertError()函數?
- 19. 標準庫和標準模板庫有什麼區別?
- 20. 標準ML的Haskell-like庫
- 21. 有沒有標準的刪除函數?
- 22. 爲什麼這個Haskell函數很慢?
- 23. Haskell - 這個函數有什麼問題?
- 24. 爲什麼在我的代碼中沒有在標準庫中工作的「qsort」?
- 25. haskell,爲什麼ghci中的頭函數沒有問題,但無法編譯?
- 26. 爲什麼Haskell中的元組沒有「通用」訪問器函數?
- 27. 有沒有一個標準庫或函數從JSON
- 28. 懲戒一個標準庫函數有和沒有pytest-模擬
- 29. 爲什麼Haskell中沒有內置的Set數據類型?
- 30. 爲什麼Java標準庫中沒有堆棧集合類型的接口?