catamorphism

    23熱度

    1回答

    我真的很喜歡在一個通用的方式與catamorphisms/anamorphisms工作的想法,但在我看來,它有一個顯著的性能缺點: 假設我們想用一個樹形結構的分類方式工作 - 來形容不同的摺疊使用通用catamorphism function: newtype Fix f = Fix { unfix :: f (Fix f) } data TreeT r = Leaf | Tree r r

    1熱度

    1回答

    在以下代碼中,如何讓cataM自上而下遍歷樹(而不是像現在這樣是自下而上的)? 我想我應該實現foldMap不同,但因爲branch如何給孩子之前處理branch節點本身沒有t實例,它兒都沒有? module Catatree where import Data.Foldable import Data.Traversable import Data.Monoid import Data

    15熱度

    2回答

    我不耐煩了,期待了解catamorphism related to this SO question :) 我只練真實世界哈斯克爾教程的開始。所以,也許我現在要問的方式太多了,如果是這樣的話,只要告訴我我應該學習的概念。我的報價爲wikipedia code sample for catamorphism。 我想知道你對下面的foldTree的看法,這是一種遍歷Tree的方法,與其他SO的問題和答

    4熱度

    2回答

    我想對n元樹數據結構進行摺疊。 (倍是又名聚集在LINQ) 我設法拿出一個工作液: public static R Aggregate<T, R>(T node, Func<T, IEnumerable<T>> getChildren, Func<T, IEnumerable<R>, R> aggregator) { var childResults = ge

    1熱度

    3回答

    典型的學術範例是總結一個列表。 是否有真實世界中使用摺疊的例子來闡明其效用?

    11熱度

    1回答

    我'發明'一個遞推方案,這是一個變形的泛化。當你與catamorphism倍的數據結構,你沒有訪問subterms,只能摺疊子結果: {-# LANGUAGE DeriveFunctor #-} import qualified Data.Map as M newtype Fix f = Fix { unFix :: f (Fix f) } cata :: Functor f => (f

    5熱度

    3回答

    有時候我發現自己正在編制模式「如果Bool不是假的」或者「如果列表不是空的使用它,否則使用別的東西」。 我要尋找的布爾認爲是「可能」的功能是什麼也許和功能列表。有沒有? 更新:我的意思是使用布爾情況作爲列表的情況下的推廣。例如,當使用Data.Text作爲T時: if T.null x then x else foo x 我在尋找減少這種鍋爐板代碼。

    10熱度

    2回答

    我最近了解了一些關於F-代數的知識: https://www.fpcomplete.com/user/bartosz/understanding-algebras。 我想將這個功能提升到更高級的類型(索引和更高主動)。 此外,我檢查了「給予Haskell促銷」(http://research.microsoft.com/en-us/people/dimitris/fc-kind-poly.pdf)

    4熱度

    3回答

    我有這樣的語言AST data ExprF r = Const Int | Var String | Lambda String r | EList [r] | Apply r r deriving (Show, Eq, Ord, Functor, Foldable) 我想將它轉換爲字符串 toString = cata $ \

    9熱度

    2回答

    我有這個AST data ExprF r = Const Int | Add r r type Expr = Fix ExprF ,我想比較 x = Fix $ Add (Fix (Const 1)) (Fix (Const 1)) y = Fix $ Add (Fix (Const 1)) (Fix (Const 2)) 但是所有的遞歸方案的功能似乎只用單一結構 顯然工作,我可以用遞