21 Stimmen

Bäume in Haskell

Ich lerne immer noch Haskell, und ich kann nicht wirklich den Unterschied zwischen

data Tree a = Leaf a | Branch [Tree a]

y

data Tree a = Leaf a | Branch (Tree a) (Tree a)

Was ist Ihrer Meinung nach das Beste? Welche Auswirkungen haben diese beiden Schreibweisen?

57voto

Tyler Eaves Punkte 12253

Der erste Zweig enthält eine Liste von Bäumen, also möglicherweise eine beliebige Anzahl von Teilbäumen. Der 2. ist explizit zwei Teilbäume, also ein Binärbaum.

9voto

sepp2k Punkte 352762

Ersteres definiert einen Baum, bei dem jeder Zweig beliebig viele Teilbäume haben kann (dargestellt als eine Liste von Bäumen), und letzteres definiert einen Baum, bei dem jeder Zweig genau zwei Teilbäume hat.

Mit anderen Worten ist der erste ein allgemeiner Baum und der zweite ein binärer Baum.

Für welche man sich entscheidet, hängt also davon ab, ob man einen allgemeinen Baum oder einen binären Baum modellieren möchte.

6voto

stephen tetley Punkte 4445

Ich habe dies als Antwort und nicht als Kommentar verfasst, damit es eine gewisse Formatierung hat:

data Rose a = Branch a [Rose a]
  deriving (Show)

sample1 :: Rose Int
sample1 = Branch 1 [Branch 2 [], Branch 3 [Branch 5 []], Branch 4 []]

Dies ist dasselbe wie bei der lib

I

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X