Diese Begriffe wurden in meinem Universitätslehrgang erwähnt. Schnelles googeln hat mich auf einige Studienarbeiten hingewiesen, aber ich suche nach einer einfachen Erklärung.
functional-programming
haskell
Gaurav Abbi
quelle
quelle
C
ist ein Objekt in irgendeiner Kategorie (sagen wir malCC
),F
ist ein Funktor vonCC -> CC
daher wird esCC
auf sich selbst abgebildet. JetztF CC -> CC
ist nur ein normaler Pfeil in der KategorieCC
. EineF
Algebra ist also ein ObjektC : CC
und ein PfeilF C -> C
inCC
Antworten:
Obwohl bereits 2 Antworten gegeben wurden, glaube ich, dass der "Bananensplit" hier noch nicht erklärt wurde.
Es ist in der Tat definiert in "Funktionale Programmierung mit Bananen, Linsen, Umschlägen und Stacheldraht, Erik Meijer Maarten Fokkinga, Ross Paterson, 1991"; Dieser Artikel ist (für mich) schwer zu lesen, da er häufig Squiggol verwendet. "Ein Tutorial zur Universalität und Ausdruckskraft von Fold, Graham Hutton, 1999" enthält jedoch eine Definition, die einfacher zu analysieren ist:
quelle
Dies ist also ein Verweis auf einen Artikel von Meijer und einigen anderen mit dem Titel " Functional Programming with Bananas, Lenses, Envelopes and Barbed Wire ". Die Grundidee ist, dass wir jeden rekursiven Datentyp annehmen können, wie zum Beispiel
und wir können die Rekursion in eine Typvariable ausklammern
Der Grund, warum ich das angehängt habe,
F
ist, dass dies jetzt ein Funktor ist! Es erlaubt uns auch, Listen zu imitieren, aber mit einem Twist: Um Listen zu erstellen, müssen wir den Listentyp verschachtelnUm unsere ursprüngliche Liste wiederherzustellen, müssen wir diese unendlich verschachteln . Das wird uns einen Typ geben,
ListFF
woDazu definieren Sie einen "Fixpunkttyp"
Als Übung sollten Sie überprüfen, ob dies unserer obigen Gleichung entspricht. Jetzt können wir endlich definieren, was Bananen (Katamorphismen) sind!
ListAlg
s ist der Typ von "Listenalgebren", und wir können eine bestimmte Funktion definierenAußerdem
Ähnlich aussehend?
cata
ist genau das gleiche wie rechts falten!Was wirklich interessant ist, ist, dass wir dies über mehr als nur Listen hinweg tun können. Jeder Typ, der mit diesem "Fixpunkt eines Funktors" definiert ist, hat ein
cata
und um sie zu berücksichtigen, müssen wir nur die Typensignatur lockernDies ist eigentlich inspiriert von einem Stück Kategorietheorie, über das ich geschrieben habe , aber dies ist das Fleisch der Haskell-Seite.
quelle
Obwohl Jozefg eine Antwort lieferte, bin ich mir nicht sicher, ob es die Frage beantwortet hat. Das "Fusionsgesetz" wird in der folgenden Abhandlung erläutert:
Grundsätzlich heißt es, dass man unter bestimmten Bedingungen die Zusammensetzung einer Funktion kombinieren ("verschmelzen") und so im Grunde genommen zu einer einzigen Falte falten kann
Die Voraussetzungen für diese Gleichstellung sind
Das "Bananensplit" - oder "Bananensplitgesetz" stammt aus dem Artikel
Leider ist der Artikel sehr schwer zu entschlüsseln, da er den Bird-Meertens-Formalismus verwendet, so dass ich weder den Kopf noch den Schwanz daraus machen konnte. Soweit ich das "Bananensplit-Gesetz" verstanden habe, heißt es, dass Sie zwei Falten, die auf dasselbe Argument angewendet werden, zu einer einzigen Falte zusammenfassen können.
quelle