Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Conquering recursion one step at a time

Conquering recursion one step at a time

Rekrusive Datenstrukturen sind allgegenwärtig und wollen verarbeitet werden. Operationen die mit diesen Strukturen arbeiten sind einerseits rekursive und können andererseits nicht mit anderen Strukturen wiederverwendet werden.

Recursion Schemes zeigen eine Pfad um die Art und Weise mit solchen Strukturen zu arbeiten zu generalisieren. Desweiteren erlauben sie Fachlichkeit von den rekursiven Operationen zu trennen.

Daniel Heinrich

October 20, 2021
Tweet

More Decks by Daniel Heinrich

Other Decks in Programming

Transcript

  1. CONQUERING RECURSION ONE STEP AT A TIME to iterate is

    human, to recurse, divine Daniel Heinrich, Nürnberg den 20.10.2021
  2. 2 EINLEITUNG • Rekursive Datenstrukturen • In der Verarbeitung dieser

    Datenstrukturen das Was vom Wie trennen • Gehirn-Gymnastik mittels Funktionaler Programmierung • Herleiten der Lösungen mittels Senacor Technologies AG Inhalt 21. Dezember 2021
  3. 3 EINLEITUNG java.util.List ist kein Typ sondern erzeugt voneinander unabhängige

    Typen List<> + String => List<String> List <> + Integer => List<Integer> List hat 1 Parameter Map 2 a.k.a. Kind Senacor Technologies AG Grundlagen die wir heute brauchen: Typ Konstruktoren 21. Dezember 2021
  4. 4 EINLEITUNG Ein Functor ist ein Kind für den eine

    map Funktion existiert, womit man den inneren Typen ändern kann. Für jedes Kind mit 1 Parameter kann eine map Funktion geschrieben werden. In Java kann kein Functor Interface definiert werden. Senacor Technologies AG Grundlagen die wir heute brauchen: Functoren 21. Dezember 2021 <= Functor[F[_]] ist ein higher-order kind ähnlich zu higher-order functions
  5. 5 REKURSIVE DATENSTRUKTUREN Eine Datenstruktur die Werte der selben Struktur

    besitzt Im Prinzip alle gerichteten Graphen, z.B. Trees oder auch fachliche Entities Senacor Technologies AG Was sind rekursive Datenstrukturen? 21. Dezember 2021
  6. 6 DATENSTRUKTUR ORIGAMI Ein fold ist das Zusammenfalten einer rekursive

    Datenstrukturen. Senacor Technologies AG Was macht man mit rekursive Datenstrukturen? 21. Dezember 2021
  7. 7 DATENSTRUKTUR ORIGAMI Senacor Technologies AG Was macht man mit

    rekursive Datenstrukturen? 21. Dezember 2021 - Pro Unterstruktur eine Akkumulations-Funktion notwendig - Fold nicht generalisierbar über alle rekursive Datenstrukturen
  8. 9 DATENSTRUKTUR ORIGAMI - Griechisch κατα: nach unten, hinein, zusammenfallen

    (Katastrophe, Katalysator) - Ein Recursion Scheme Senacor Technologies AG Catamorphism 21. Dezember 2021
  9. 11 DATENSTRUKTUR ORIGAMI - FB hält Wert zum akkumulieren in

    der Position des Typ-Parameters - Die Algebra ist die generische Akkumulations-Funktion Senacor Technologies AG Fachlichkeit als F-Algebra 21. Dezember 2021
  10. 13 DATENSTRUKTUR ORIGAMI Dazu verwendet man einen sog. Fixpoint Datatyp:

    Eine rekursive Datenstruktur die sich selbst in den verwendeten Functor einbettet. Senacor Technologies AG Wir können mit jeden Functor eine rekursive Datenstruktur erstellen 21. Dezember 2021
  11. 14 DATENSTRUKTUR ORIGAMI Senacor Technologies AG Oft ist es interessant

    einen bekannten Weg rückwärts zu gehen 21. Dezember 2021
  12. 17 DATENSTRUKTUR ORIGAMI - Griechisch hyle, ὕλη: Materie, zusammen mit

    morpho (etwas formen) eine Resultat aus Bestandteilen formen. - Rekursiven Algorithmus in zwei simplere Teile zerlegen (Co- / Algebra) - Überspring das erstellen einer rekursiven Datenstruktur - „data structures are frozen algorthims“ – John Doe Senacor Technologies AG Hylomorphismus 21. Dezember 2021
  13. 18 DIE WELT DER KOMBINATIONSMÖGLICHKEITEN - Zippen von Coalgebras -

    Rekursive Datenstrukturen modifizieren mit sog. Transformations (F[A] => F[A]) - Entweder als Coalgebra oder Algebra anwendbar. Top-to-Bottom oder Bottom-to-Top - Mehrere Transformations können zusammengefasst werden - z.B. Compiler Optimierungen - Datenstruktur unabhängige Funktionen definieren - Für ein Subset von Functoren möglich - z.B. depth, size, contains, find, collect - Datenstrukturen Annotieren - Attr Fixpoint Data Type - Beim Aufbauen einer Struktur (ana) jeden Node mit dessen Seed annotieren - Beim Zusammenfalten einer Struktur (cata) die Struktur intakt lassen aber jeden Node mit dem berechneten Wert annotiern Senacor Technologies AG Neues durch kombinieren von bekannten schaffen 21. Dezember 2021
  14. 20 DIE WELT DER KOMBINATIONSMÖGLICHKEITEN Senacor Technologies AG Es existiert

    ein ganzer Zoo an Recursion Schemes 21. Dezember 2021
  15. 21 FAZIT - Mit Java kann man nicht richtig Funktional

    programmieren ;-) - Category Theory hilft uns Lösungen zu finden - Funktionen lassen sich kombinieren und schaffen so neue Möglichkeiten - Rekursive Algorithmen kann man auf Datenstrukturen abbilden Senacor Technologies AG Was haben wir gelernt 21. Dezember 2021
  16. 24 • To Iterate is Human, to Recurse, Divine James

    O. Coplien, Bell Labs C++ Report 10(7), July/August 1998, pp. 43 – 51 • Functional Programming with Bananas, Lenses, Envelopes and Barbed Wire 1991 by Erik Meijer , Maarten Fokkinga , Ross Paterson • A tutorial on the universality and expressiveness of fold 1999 Graham Hutton Journal of Functional Programming , Volume 9 , Issue 4 , July 1999 , pp. 355 - 372 • Peeling the Banana: Recursion Schemes from First Principles 2017 Zainab Ali • Recursion Schemes, Part I – V 2014-2018 Patrick Thomson • Droste • Awesome recursion schemes Senacor Technologies AG Quellen 21. Dezember 2021