decembersoul
haskell?? ich bitte dich, jeder vernünftige mensch meidet funktionelle programmierung
naja, also ich mag haskell absolut nicht ..
import GraphicsUtils
type KnAnz = (Int,Int,Int,Int,Int)
data Bb a = Bl | Kn a (Bb a) (Bb a)deriving (Eq, Show) --Datentyp des normale Blattbaums
data Zb a = Bz KnAnz | Kz KnAnz a (Zb a) (Zb a) deriving (Eq, Show) --Datentyp unseren Blattbaums mit zusatzinfos(KnAnz) zum zeichnen
gka :: Zb a -> Int --Funktion die Gesamtknotenzahl zurückgibt
gka (Bz (x,a,b,c,e)) = 1
gka (Kz (x,a,b,c,e) (d) (l) (r)) = x
lka :: Zb a -> Int --Funktion die Knotenzahl des linken Teilbaums zurückgibt
lka (Bz (a,x,b,c,e)) = 0
lka (Kz (a,x,b,c,e) (d) (l) (r)) = x
lkr :: Zb a -> Int --Funktion die Knotenzahl des rechten teilbaums zurückgibt
lkr (Bz (a,b,c,x,e)) = 0
lkr (Kz (a,b,c,x,e) (d) (l) (r)) = x
ko :: (Bb a) -> (Zb a) --Baumumformungsfunktion durch benutzung der get-funktionen
ko Bl = Bz (1,0,0,0,0)
ko (Kn d l r) = Kz (gka (ko l)+ gka (ko r) + 1,gka (ko l ),lkr (ko l),gka(ko r),lka (ko r)) d (ko l) (ko r)
einBb:: Ord a => a -> Bb a -> Bb a --Einbinden von Schlüsseln
einBb b Bl = Kn b Bl Bl
einBb b (Kn d l r) = if b < d then (Kn d (einBb b l) r)
else (Kn d l (einBb b r))
vb :: [Int] -> IO() --Funktion zum Umwandeln einer liste in den Binärbaum und seine Ausgabe
vb a = drawtree (foldr einBb Bl a)
xabstand :: Int --Konstanten zum Zeichen
xabstand = 30
yabstand :: Int
yabstand = 30
drawnode w (Kz (a, b, c, d, e) wert links rechts) x y = do --Hauptzeichenfunktion
drawInWindow w (line (x, y) (x-(c+1)*xabstand, y + yabstand)) --Verbindungslinien
drawInWindow w (line (x, y) (x+(e+1)*xabstand, y + yabstand))
drawInWindow w (withRGB (RGB 255 0 0) (ellipse (x-15, y-15) (x+15, y+15))) --Kreise der Knoten
drawInWindow w (withTextColor (RGB 255 255 255) (text (x-3,y-5) (show wert)))
drawnode w links (x-(c+1)*xabstand) (y + yabstand) --linken Teilbaum zeichnen
drawnode w rechts (x+(e+1)*xabstand) (y + yabstand) --rechten Teilbaum zeichnen
drawnode w (Bz a) x y = drawInWindow w (withRGB (RGB 0 255 0) (polygon [(x-10,y-10),(x+10, y-10), (x+10, y+10), (x-10, y+10)]))
drawtree baum = runGraphics ( do --Initialisierung des grafikfensters/aufrufen der hauptzeichenfunktion
w <- openWindow "PP-Praktikum 2004" (400,400)
drawnode w (ko baum) (xpos (ko baum)) 50
getKey w
closeWindow w
)
xpos (Kz (a, b, c, d, e) wert links rechts) = (b + 1) * xabstand --Anfangsposition bestimmen
Alles anzeigen
dieses snippet konvertiert ne gegeben liste in einen baum und gebt den dann mit bunten blättern und knoten in nem fenster aus .. mehr nicht!! aber bitte guck die mal die syntax an ..
das war nur mein statement zu "Vielleicht will ich mir Haskell noch mal ansehen."!
mfg
andi