# funktionale Programmierung



## felix92 (15. Jul 2019)

Huhu und zwar stehe ich gerade vor 3 Aufgaben zur Prüfungsvorbereitung wo ich nicht so recht weiß wie ich diese lösen soll (im Anhang).
Wie das Kompositum-Muster umgesetzt wird weiß ich. Bei Aufgabe 2 müsste das 2. interface Visitor<A,R> heißen vermute ich. A für den Typ aus Tree und R für den Resultattyp quasi R Leaf <A> als Deklaration .
Kann mir da jmd weiterhelfen vlt. auch eine Lösung mit Erklärung ?
Danke im Vorraus
MfG Felix


----------



## httpdigest (15. Jul 2019)

Das Thema hat genau mal Null mit funktionaler Programmierung zu tun. Es gibt nur immer Professoren, die gerne die Haskell Syntax für alles verwenden, unter anderem eben, um algebraische Datentypen zu beschreiben.
Schlage doch mal ganz konkret deine vermuteten Antworten für die drei Aufgaben vor. Es soll ja offensichtlich ein Binärbaum als Java Klassen realisiert werden. Welche Klassen brauchst du dann dafür genau?


----------



## Xyz1 (15. Jul 2019)

Ist das in der Beschreibung nich die (erweiterte/angereicherte) Backus-Naur-Form oder ein Abwandlung davon?


----------



## httpdigest (15. Jul 2019)

Nein, ist es nicht. Das ist ganz klassisch Haskell Syntax zur Deklaration eines Datentypen mit dem "data" Schlüsselwort.


----------



## Xyz1 (15. Jul 2019)

Sieht aber auch ein bisschen so aus wie Backus-Naur


----------



## Xyz1 (15. Jul 2019)

Aber zurück zum Thema... Eigentlich gibt es diese schon: https://docs.oracle.com/javase/7/docs/api/javax/swing/tree/DefaultMutableTreeNode.html

(Nicht davor zurück schrecken, dass diese Klasse in javax.swing is...)


----------



## httpdigest (15. Jul 2019)

Das wäre natürlich super als Antwort in einer Klausur: "Implementieren sie diese und jene Klassen".
Antwort: "Nö! Gibt es ja schon."


----------



## Xyz1 (15. Jul 2019)

Ok, dann muss er in die saure Birne beißen...


----------



## felix92 (16. Jul 2019)

Huhu im Anhang mal meine Antworten bzw. Ideen dazu.


----------



## felix92 (16. Jul 2019)

Aktuell


----------



## httpdigest (16. Jul 2019)

Denk nochmal drüber nach. Bei der Klassendeklaration für Leaf und Branch fehlt so einiges. Die Klasse `Branch` sieht garantiert strukturell nicht exakt identisch wie `Leaf` aus.


----------



## felix92 (16. Jul 2019)

class Leaf<A> implements Tree{}
?


----------



## httpdigest (16. Jul 2019)

Warum hast du denn jetzt das Attribut aus der Klasse wieder rausgenommen? Jetzt steht doch überhaupt nichts mehr im Leaf drin. Bitte erst nachdenken, bevor du Vorschläge machst.


----------



## felix92 (16. Jul 2019)

class Leaf implements Tree { A a}
class Branch implements Tree { A a , Leaf leaf}


----------



## felix92 (16. Jul 2019)

Bei Branch fehlt noch Branch branch korrekt ?


----------



## httpdigest (16. Jul 2019)

Beschreibe vielleicht erstmal, was für dich genau "data Tree a = Leaf a | Branch (Tree a) a (Tree a)" genau bedeutet, also wie du das genau interpretierst. Basierend darauf kann man diese Bedeutung dann eins zu eins in Java Klassen implementieren.


----------



## felix92 (17. Jul 2019)

Naja Leaf a ist das einzelne Blatt dabei ist a der Wert und Branch ist die Verzweigung mit einem linken Blatt a als Verzweigungswert und nochmal Tree a als rechtes Blatt dabei kann Tree a allerdings auch wieder ein Branch sein also eine weitere Verzweigung so grob ich hoffe das ist verständlich wie ich das meine 
 / \
1  / \
   7  12
zum Beispiel


----------

