1
這對於將修改給定的路徑和新的價值樹的特定節點的功能的僞代碼:如何使用fold實現深度樹算法?
path_set val path tree =
| empty? path -> val
| otherwise -> set (path_set val (tail path) (get tree (head path))) tree
例如,
path_set 50 [1 1] [[1 1] [1 1]] = [[1 1] [1 50]]
怎麼能這個算法可以實現使用折?
摺疊可能不是最好的方式來做到這一點。摺疊通常用於迭代應用,而不是遞歸。您還沒有定義,你也可能會想要什麼樣的樹,什麼都者的這條道路代表等來實現樹作爲它自己的數據類型,因爲列表不能任意嵌套在Haskell,分公司有可以說,深度相同。 – bheklilr
如果你想摺疊做到這一點,你需要一個拉鍊。實際上,LYAH教程有一個關於拉鍊的頁面,並且解決了幾乎這個確切的問題:根據方向列表在樹中移動。 http://learnyouahaskell.com/zippers所以,你可以做一個摺疊,但它可能不會更乾淨或更快,因爲你給的代碼已經非常簡單。 – user2407038