是否可以使用foldl而不是foldr來實現過濾器?如果是這樣,請輕輕解釋你的實施。是否可以使用foldl而不是foldr來實現過濾器?
3
A
回答
9
filter' :: (a -> Bool) -> [a] -> [a]
filter' p xs = foldl (\k x -> if p x then k . (x:) else k) id xs []
+0
感謝您添加此答案並向我介紹差異列表。通過問這個問題真的學到了一個新概念。 –
+3
'過濾器'甚至[1 ..]'。餵食無限列表時,'foldl' _never_可以產生任何東西。 –
3
如果您想保留列表的順序,那麼效率並不高。天真的做法是將其改爲foldl,然後顛倒結果列表。
2
想出了這樣一個:
myFilter p coll =
foldl step [] coll where
step acc e
| p e = acC++ [e]
| otherwise = acc
這不是真的有效,因爲它在列表的末尾插入一個元素。
相關問題
- 1. 在haskell中使用foldr進行搜索而不是foldl
- 2. foldl/foldr查詢
- 3. Foldable的foldl/foldr實現來自haskell中的二叉樹嗎?
- 4. 如何在Erlang中使用foldr實現foldl?
- 5. 我可以通過linq而不是For Each來實現嗎?
- 6. 結合foldl和foldr
- 7. Haskell thunks - foldl vs foldr
- 8. 是否有可用的Bloomier過濾器的實現?
- 9. 什麼是高階函數foldl和foldr的實例?
- 10. 是否可以使用FQL實現friends.getMutualFriends?
- 11. withFilter而不是過濾器
- 12. 是否可以使用'in'關鍵字來過濾ListProperty(item_type = datetime.date)?
- 13. 用'OR'而不是'AND'來過濾JS
- 14. foldl with(++)比foldr慢很多
- 15. 是否可以僅使用LISP基元來實現協程?
- 16. 是否可以使用SonarQube來實現類CAST分析?
- 17. 是否可以使用數組列表來實現鏈表?
- 18. 實現任何使用foldl
- 19. Java EE6過濾器是否可以使用註釋來定義,但是可以在web.xml中應用?
- 20. Google Places API:是否可以指定建立(使用過濾器)
- 21. 是否可以在Linq to SQL中使用自動過濾器?
- 22. 是否可以在Drupal的暴露過濾器上實現條件選擇?
- 23. ActiveRecord下拉過濾器顯示所有可能性,而不是實際過濾
- 24. 是否可以使用Servlet 3.0註釋來配置外部servlet /過濾器?
- 25. 使用foldr實現郵編
- 26. 使用foldr實現inits
- 27. 是否可以使用不敏感的情況過濾TClientDataset?
- 28. 是否有可能過濾DataView的列而不是行
- 29. 是否有商用過濾器的開源實現?
- 30. 是否可以用css實現斜邊?
要添加到這一點,我很高興我不敢問及今天學到新的東西(差異表)。這是值得的恥辱! ;) –
答案作爲評論,因爲它已關閉:不,這是不可能的,好吧,有點。當給定一個無限列表時,'filter'可以產生輸出,'foldl'不能。所以你不得不大塊你的輸入,並使用foldl過濾器塊,明確結果。爲了處理有限的列表,Hammar的解決方案效率最低。 –
@DanielFischer tnx添加此 –