2017-10-02 5 views
1

Ich verstehe nicht, wie kann ich ein Beispiel mit Chronomorphismus erstellen. Ich weiß über Hylomorphismus (cata, ana) auch ich weiß über histo und futu.Ein Beispiel für Chronomorphismus

Aber ich kenne kein Beispiel für Chronomorphismus (vielleicht ein Verhalten wie in Tardis Monade).

Auch Link im Zusammenhang https://github.com/ekmett/recursion-schemes/issues/42

Dies ist nicht mit Histomorphisms, Zygomorphisms and Futumorphisms specialised to lists verbunden, da nicht einige Beispiele mit chronomorphism hat.

+0

vielleicht bei [email protected] die Frage stellen kann – palik

+0

helfen auch https://stackoverflow.com/a/37002861/2789312 – palik

+1

https://gist.github.com/danidiaz/e5debcaf531838eb6e2afd3ef3b34d60 – danidiaz

Antwort

0

Die wahrscheinlich größte Verwendung von Chronomorphismen ist das Kollabieren eines benannten Syntaxbaums. Insbesondere können Sie auf Namen verweisen, die noch nicht verarbeitet wurden, sowie auf Namen, die bereits verarbeitet haben.

Eine andere Sache, die Sie mit Chronomorphismen tun können, ist Dynamophismen neu schreiben! Sie können mehr über Dynamorphismen here lesen. Eines der Beispiele, die sie anführen, sind die katalanischen Zahlen. Ich habe es unten in Haskell übersetzt.

import Data.Functor.Foldable 
import Control.Arrow 
import Control.Comonad.Cofree 

dyna :: (Functor f) => (f (Cofree f a) -> a) -> (c -> f c) -> c -> a 
dyna a c = extract . h where h = (uncurry (:<)) . (a &&& id) . fmap h . c 

catalan :: Int -> Int 
catalan = dyna coalgebra project where 
    coalgebra :: ListF Int (Cofree ListF Int) -> Int 
    coalgebra Nil = 1 
    coalgebra (Cons x table) = sum $ zipWith (*) xs (reverse xs) 
     where xs = take x table 

Sie könnten auch this nützlich finden. Es hat ein Beispiel, das einen Futumorphismus verwendet, um einen Baum zu bauen, und einen Katamorphismus, um ihn abzubauen (obwohl dies okkludiert ist). Natürlich ist diese Karte eine weitere Spezialisierung des Chronomorphismus.

+0

Sorry, aber es sieht so aus, als ob dein Code nicht funktioniert. Könnten Sie bitte eine funktionierende Version bereitstellen? – xgrommx

Verwandte Themen