OO-Programmierung/ binaere baeume

Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.

OO-Programmierung/ binaere baeume
meine frage bezieht sich speziell auf Klausuraufgabe Nr4 vom 6.10.93

kann mir jemand sagen warum ich bei meinem prog diese fehlermeldung krieg? ich mein ich weiss dass da noch einiges net ganz richtig ist aber ich versteh auch nicht wie ich sonst ueberpruefen soll ob der cdr leer ist :

[COLOR=red]cdr: expects argument of type ; given testbaum[/COLOR]

so und hier das prog selber graue haare kriegt

(define (make-bintree)
  (define (emptytree bintree)
   (set! bintree '()))
    
  
  (define (cons-tree bintree label left-bintree right-bintree)
   (begin 
    (emptytree bintree)
    (set! bintree (list label left-bintree right-bintree))
   ))
  
  (define (leaf bintree label)
   (begin
    (emptytree bintree)
    (set-car! bintree label)
    ))
  
  (define (root bintree)
    bintree
    )
  
  (define (left bintree)
    (if (eq? (cdr bintree) '())
    (display "linker zweig leer")
    (cadr bintree)
    ))
  
  (define (right bintree)
    (caddr bintree)
    )
  
  (define (is-emptytree? bintree)
    (if (and (eq? (car bintree) '()) (eq? (cadr bintree) '()) (eq? (caddr bintree)))
        #t
        #f)
    )
  
  (define (dispatch m)
    (cond ((eq? m 'emptytree) emptytree)
          ((eq? m 'cons-tree) cons-tree)
          ((eq? m 'leaf) leaf)
          ((eq? m 'root) root)
          ((eq? m 'left) left)
          ((eq? m 'right) right)
          ((eq? m 'is-emptytree?) is-emptytree?)
          (else (display "Unknown command to make tree:  m"))))
  dispatch
  )



(define mybintree (make-bintree))
((mybintree 'emptytree) 'testlinks)
((mybintree 'emptytree) 'testrechts)
((mybintree 'cons-tree) 'testbaum 'zentralknoten 'testlinks 'testrechts)
((mybintree 'left) 'testbaum)

dange im vorraus …
gruss
fred


Is doch ganz simpel:
Frag dich einfach was das cadr von 'Testbaum sein soll :slight_smile:
Um ein cadr ausführen zu können, brauchst du ein cdr, also sollte deine letzte Zeile z.B. heissen:

((mybintree 'left) (list 'testbaum 'testliste))

So denk ich mir das zumindest, ich hab mir das Programm sonst nicht weiter angeschaut :slight_smile:


das hilft leider nix … der gibt mir ja dann auch noch nicht den inhalt von dem baum aus! ich weiss noch nicht genau woran das liegt … ich hoffe mal ich krieg das bis heut abend mal raus.

danke aber troztdem fuer den vorschlag, vielleicht hilft er mir den fehler zu lokalisieren, falls ihn jemand vor mir findet soll ers posten,

dangge, fred


dein baum soll doch so aussehen oder? :

(zentralknoten '() '())

und ((mybintree 'left) 'testbaum) soll dann “linker zweig leer” sein oder ? wenn ja dann liste deinen bintree bevor du ihn cdr’st also (cdr (list bintree)). wo nicht wenigstens ein pair ist kann er nicht cdr’n.
ach ja statt (eq? (… bintree) '()) kannste auch einfach (null? bintree) verwenden, oder darf man es bei den aufgaben nicht beutzen nachschau ?

aber da sollte eingentlich ('() '()) rauskommen wenn da gecdr’d wird komisch …


du hast schon recht, so sollte mein baum aussehen, aber egal was ich damit mache, es laesst sich nix cdrn. das null pradikat macht da auch keinen unterschied mehr.
Hm, es muss doch irgendwie machbar sein. ich weiss etz inzwischen, dass das irgendwas mit bintree zu tun haben muss. ich poste hier mal kurz nen teil von meinem veraenderten code:

(define (cons-tree bintree label left-bintree right-bintree)
   (begin 
    (emptytree bintree)
    (set! bintree (list label left-bintree right-bintree))))

selbst wenn ich meinen bintree als leere liste erst erzeuge (“jeder binaere baum soll am anfang leer sein blablabla”) und ihm dann als neuen wert diese liste da zuweise, kann ich das ding danach net cdrn ? ich kapiers net :frowning: :frowning: :frowning: :frowning: :frowning: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand:


Okay, habs mir jetzt mal genauer angeschaut, die Sache ist, dass dein Objekt ja gar keinen Inneren Zustand (also den Binärbaum) besitzt. Der muss entweder Parameter der Make-Funktion sein, oder per “let” in der inneren Umgebung festgehalten werden. Deine Funktionen funktionieren zwar glaube ich alle 1A, aber sie verändern max die Luftfeuchtigkeit, du rufst sie ja mit einem String zB 'testbaum auf. Ich kanns jetzt irgendwie auch nicht genauer beschreiben (mich wunderts eh, dass du nicht schon vorher eine Fehlermeldung bekommst…) Ich hab auch versucht, deinen Kot abzuändern, war dann aber zu faul, weil da fehlen doch noch die ganzen Fallunterscheidungen, ich meine, du resettest ja in jeder Funktion erst einmal den Baum. Naja, wie auch immer gib mal im Interpreter:

(cdr 'testbaum) ein, da erhälst du nämlich genau diese Fehlermeldung, und das passiert auch in deinem Objekt. Grundsätzlich müsste dein Objekt so aussehen:

(define (make-tree)
(let ((bintree '() ))

(define (fn1 blabla…


(define (dispatch m)
(cond ((blabla…


)
)

dispatch )) <= wichtig, erst hier die Let-Umgebung zumachen!

Ich hatte am Anfang auch Zweifel, ob das funktioniert, weil ich dachte, dass das Let den Bintree bei jedem Objektaufruf wieder resettet, aber einmal definiert, bleibt die Umgebung ja offen.

PS: Mach doch nicht immer gleich :wand: ,
probiers lieber mal mit :smiley:


jo thx! ich hab das schon an ein paar anderen objekten vorhin geuebt und mir is glaub ich auch etz klar warum des alles so scheisse daneben gegangen ist … eben die sache mit den umgebungen. hm, aber ich glaub das tu ich mir denn morgen mal an. ich pack des heut sowieso nicht mehr.

PS: :wand: ggg
Ich find eigentlich nur den smiley so lustich … so oft stoss ich mitm kopf nich gegen die :wand: … nur gegen den monitor doink!


hehe, vorallem so synchron:

:wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand: :wand:


Robert du nase ! :-p
das pic ist ja noch besser als der kiffer taliban !


Man beachte auch die geniale RTL-Style Unterschrift :-p

Bin mal gespannt wann die Amis ihre Killer auf mich hetzen…