www.vorhilfe.de
Vorhilfe

Kostenlose Kommunikationsplattform für gegenseitige Hilfestellungen.
Hallo Gast!einloggen | registrieren ]
Startseite · Forum · Wissen · Kurse · Mitglieder · Team · Impressum
Forenbaum
^ Forenbaum
Status Vorhilfe
  Status Geisteswiss.
    Status Erdkunde
    Status Geschichte
    Status Jura
    Status Musik/Kunst
    Status Pädagogik
    Status Philosophie
    Status Politik/Wirtschaft
    Status Psychologie
    Status Religion
    Status Sozialwissenschaften
  Status Informatik
    Status Schule
    Status Hochschule
    Status Info-Training
    Status Wettbewerbe
    Status Praxis
    Status Internes IR
  Status Ingenieurwiss.
    Status Bauingenieurwesen
    Status Elektrotechnik
    Status Maschinenbau
    Status Materialwissenschaft
    Status Regelungstechnik
    Status Signaltheorie
    Status Sonstiges
    Status Technik
  Status Mathe
    Status Schulmathe
    Status Hochschulmathe
    Status Mathe-Vorkurse
    Status Mathe-Software
  Status Naturwiss.
    Status Astronomie
    Status Biologie
    Status Chemie
    Status Geowissenschaften
    Status Medizin
    Status Physik
    Status Sport
  Status Sonstiges / Diverses
  Status Sprachen
    Status Deutsch
    Status Englisch
    Status Französisch
    Status Griechisch
    Status Latein
    Status Russisch
    Status Spanisch
    Status Vorkurse
    Status Sonstiges (Sprachen)
  Status Neuerdings
  Status Internes VH
    Status Café VH
    Status Verbesserungen
    Status Benutzerbetreuung
    Status Plenum
    Status Datenbank-Forum
    Status Test-Forum
    Status Fragwürdige Inhalte
    Status VH e.V.

Gezeigt werden alle Foren bis zur Tiefe 2

Navigation
 Startseite...
 Neuerdings beta neu
 Forum...
 vorwissen...
 vorkurse...
 Werkzeuge...
 Nachhilfevermittlung beta...
 Online-Spiele beta
 Suchen
 Verein...
 Impressum
Das Projekt
Server und Internetanbindung werden durch Spenden finanziert.
Organisiert wird das Projekt von unserem Koordinatorenteam.
Hunderte Mitglieder helfen ehrenamtlich in unseren moderierten Foren.
Anbieter der Seite ist der gemeinnützige Verein "Vorhilfe.de e.V.".
Partnerseiten
Dt. Schulen im Ausland: Mathe-Seiten:

Open Source FunktionenplotterFunkyPlot: Kostenloser und quelloffener Funktionenplotter für Linux und andere Betriebssysteme
Forum "Haskell" - Variable Daten- und Fkts-namen
Variable Daten- und Fkts-namen < Haskell < Programmiersprachen < Praxis < Informatik < Vorhilfe
Ansicht: [ geschachtelt ] | ^ Forum "Haskell"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien

Variable Daten- und Fkts-namen: Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 19:05 Fr 12.01.2007
Autor: no_max

Ich habe diese Frage in keinem Forum auf anderen Internetseiten gestellt.
(<-- soll man ja reinschreiben)

ich habe folgenden (funktionierenden) Code (habe ihn mal reduziert - tatsächlich gibt es noch mehr Funktionen und Datentypen, aber ein Beispiel sollte hier reichen):
data BinTree1 = Leaf1 Float | Node1 BinTree1 BinTree1 deriving Show
data BinTree2 = Leaf2     | Node2 BinTree2 BinTree2 Float deriving Show

preOrder1 :: BinTree1 -> [Float]
preOrder1 (Leaf1 n) = [n]
preOrder1 (Node1 left right) = preOrder1 left ++ preOrder1 right

preOrder2 :: BinTree2 -> [Float]
preOrder2 (Leaf2) = []
preOrder2 (Node2 left right value) = [value] ++ preOrder2 left ++ preOrder2 right

Meine Idee: Kann man diese Funktionen und/oder Datentypen nicht irgendwie zusammenfasssen, d.h. schon in der Funktionsbenennung irgendwie das PatternMatching von Haskell (bzgl. 1 oder 2) nutzen und dann entsprechend BinTree, Node und Leaf mit dem entsprechenden Suffix zu versehen? Dass ich hier noch auf andere Probleme stoßen werde, weil z.B. der Konstruktor Node2 noch einen Float kriegt im Gegensatz zu Node1, ist mir klar (aber hier erstmal nicht die Frage).
(Oder vielleicht ist letzteres auch schon die Begründung dafür, warum soetwas wie das, was mir als Idee vorschwebt gar nicht vonnöten ist, weil halt sowieso Funktionen mit gleichen Parametern auch gleich heißen können und unterschiedlich benannte Funktionen andererseits halt sowieso unterschiedliche Parameter kriegen...?!)

        
Bezug
Variable Daten- und Fkts-namen: Antwort
Status: (Antwort) fertig Status 
Datum: 08:41 Mo 22.01.2007
Autor: kretschmer

Hallo,

die Antwort warum das nicht geht ist ganz einfach: Überlege Dir doch den Typen der resultierenden Funktion?  Ist der nun BinTree1 -> [Float] oder BinTree2 -> [Float]?  Beides wird Haskell nicht zulassen, da es ein strenges Typsystem besitzt.

Zwei Möglichkeiten bietet Haskell aber dennoch:

1) Du nimmst Either BinTree1 BinTree2 -> [Float]; dann musst Du aber jedes mal auf die Unterklasse prüfen.  (Zur Erinnerung: data Either a b = Left a | Right b).  Dies hätte allerdings den Vorteil, dass man eine Liste von Bäumen anlegen kann in der Form [Either BinTree1 BinTree2] und dann diese mit solchen Funktionen direkt bearbeiten könnte.

2) Du machst eine Klasse.  Kurz gesagt erlauben Klassen in Haskell das überladen von Operatoren/Funktionen.  So kannst Du zum Beispiel eine Klasse wie folgt für dein Problem definieren:

class BinTree a where
  preOrder :: a -> [Float]

instance BinTree BinTree1 where
  preOrder = preOrder1

instance BinTree BinTree2 where
  preOrder = preOrder2

Der Unterschied zur Lösung 1 ist der, dass man seine Bäume nicht extra in einen Either-Typen packen muss.  Diese Technik erlaubt natürlich auch nicht die Bäume zu mischen.  Es erlaubt einem nur mittels preOrder einemal preOrder1 und ein anderes mal preOrder2 zu identifizieren.  Man erstellt noch immer explizit einen Baum von einem bestimmten Typen und benutzt darauf preOrder.  Das Haskell-Klassen-System erlaubt es allerdings allgemein Funktionen zu generieren, die einen Typen einer bestimmten Klasse verwenden.  So kannst Du zum Beispiel eine Funktion sumTree wie folgt machen:

sumTree :: (BinTree a) => a -> Float
sumTree tree = foldl (+) 0 (preOrder a)


Mit freundlichen Grüßen
Matthias Kretschmer

Bezug
Ansicht: [ geschachtelt ] | ^ Forum "Haskell"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien


^ Seitenanfang ^
www.vorhilfe.de