2
A
回答
5
讓我們來看看foldr
的類型。
foldr :: (a -> b -> b) -> b -> [a] -> b
既然你提供使用x
和y
的功能,你可以從x是從你的列表([1,2,3]
)的值類型看,和y必須累加器值,你初始化第二個參數爲foldr
。
4
的foldr
定義是
foldr f z [] = z
foldr f z (x:xs) = f x (foldr f z xs)
您只需直接將其套用在你的榜樣:
foldr (\x y -> foo x y) z [1,2,3]
=
(\x y -> foo x y) 1 (foldr (\x y -> foo x y) z [2,3])
=
foo 1 (foldr (\x y -> foo x y) z [2,3])
所以x
是1
和y
是foldr (\x y ...) z [2,3])
。
一般來說,你能想到的foldr f z
作爲一個清單,f
替換每個(:)
,而[]
與z
。所以foldr f z [a,b,c,d]
= f a (f b (f c (f d z)))
(因爲
相關問題
- 1. 哈斯克爾:foldr相似VS foldr1
- 2. 哈斯克爾foldr相似,並與foldl
- 3. 哈斯克爾:與foldr相似定義產品
- 4. 爲什麼foldr相似更是不可以偷懶的哈斯克爾元組
- 5. 哈斯克爾 - 無限名單 -
- 6. 哈斯克爾焦炭名單
- 7. 哈斯克爾,替換名單
- 8. 哈斯克爾名單和功能
- 9. 哈斯克爾名單乘法
- 10. 哈斯克爾
- 11. 哈斯克爾
- 12. 哈斯克爾
- 13. 我感到困惑的功能`foldr`的哈斯克爾
- 14. 在哈斯克爾
- 15. 在哈斯克爾
- 16. 在哈斯克爾
- 17. Control.Monad.Writer哈斯克爾
- 18. 哈斯克爾 - div`
- 19. 在哈斯克爾
- 20. Control.Monad.State哈斯克爾
- 21. zipWith哈斯克爾
- 22. 在哈斯克爾
- 23. 哈斯克爾Monad.Writer
- 24. 哈斯克爾 - 布爾RoseTree
- 25. 命名哈斯克爾模塊的
- 26. 哈斯克爾 - 相關類型
- 27. 哈斯克爾相反(列表)
- 28. 哈斯克爾相當於Boost.Fusion
- 29. 簡單的哈斯克爾循環
- 30. 哈斯克爾PostgreSQL的簡單FromField
[a,b,c,d]
=(:) a ((:) b ((:) c ((:) d [])))
'讓結果:: B;結果= foldr相似(\(X :: A) - > \(Y :: B) - >未定義:: B)(未定義: :b)([1,2,3] :: [a])' –