Seite 1 von 1

Ü2 A4 Binärbaum

Verfasst: 2. Nov 2006 14:51
von Drudge
Moin!

Kann es sein, dass der Baum den wir in Scheme umsetzten sollen, nur vom Knoten in die Blätter verlinkt sein kann? Ich wollte intuitiv gleich in der Datenstruktur sowohl Nachfolger, als auch Vaterknoten speichern. Als ich bei der A4.2 dann den Baum ralisieren wollte, ist mir aufgefallen, dass ich dabei mit Scheme auf ein Problem gestoßen bin.

Code: Alles auswählen

;; Data Analysis and Definition:
(define-struct binbaum (dad l_child r_child content))
;; A binbaum is a structure: (make-binbaum binbaum_a binbaum_b binbaum_c Knoten)
;; where the first three parameter, binbaum_a, binbaum_b and binbaum_c, is a binbaum or empty
;; and the last parameter is a symbol, a number or empty.

(define b1(make-binbaum empty b2 b3 5))
(define b2(make-binbaum b1 b4 b5 3))
(define b3(make-binbaum b1 b6 b7 8))
(define b4(make-binbaum b2 empty empty 1))
(define b5(make-binbaum b2 empty empty 4))
(define b6(make-binbaum b3 empty empty 7))
(define b7(make-binbaum b3 empty empty 9))

Ich erhalte immer den Fehler: reference to an identifier before its definition: b2
Nur umstellen der Definitionen würde aber auch nicht helfen, da ja dann der Vaterknoten noch nicht bekannt wäre. Habt ihr die Aufgabe ohne Referenz auf den Vaterknoten gelöst? Ich bin in der Übung nur bis A3 gekommen und wollte daher mal wissen, ob mir hier jemand helfen kann.

Danke schonmal im Vorraus!

Verfasst: 2. Nov 2006 14:58
von E.d.u.
es reicht wenn du für jeden Knoten seine Children speicherst, um die Prozedur rekursiv aufzurufen.
Du brauchst die Eltern zu speichern wenn du von "unten" nach "oben" willst aber das brauchen wir nicht oder ?

Verfasst: 2. Nov 2006 15:04
von Drudge
Nö, brauchen wir wohl nicht, aber irgendwie hätte ichs mit Link zum Vaterknoten ganz nett gefunden. Aber wenn es so nicht gedacht war, dann weiß ich jetzt wenigstens wie ich die Aufgabe lösen muss.

Danke!

Verfasst: 2. Nov 2006 23:16
von SebFreutel
Drudge hat geschrieben:Nö, brauchen wir wohl nicht, aber irgendwie hätte ichs mit Link zum Vaterknoten ganz nett gefunden.
Wie war das noch? "Iterative Verfeinerung von Programmen" (Folie T3-55ff), also nicht nach Lust und Laune ungenutzte Features implementieren, sondern nach und nach das was man braucht. (Wenn ich den Sinn dieser Folien richtig verstanden habe...) :roll:

Verfasst: 2. Nov 2006 23:32
von Drudge
Liegt daran, dass es schwer ist alles zu vergessen, was man schon an Datenstrukturen kennt. Und wer schon einmal GDI2 gehört hat und die Praktika etc. gemacht hat, der kennt sich bei Baumstrukturen eben ganz gut aus. Dass es da bei Scheme in unserer derzeitigen Ausbaustufe Probleme gibt mag ja sein, aber daran muss man eben ersteinmal denken... rein intuitiv bin ich eben auf das gekommen, was ich bisher gelernt habe.


Und sowas wie "iterative Verfeinerung" ist ja ganz toll, nur finde ich es sehr schwer mich daran zu gewöhnen. Meine übliche Herangehensweise hat sich bei mir schon recht fest eingeprägt und es ist nicht leicht sich davon so von heute auf morgen zu trennen.

Verfasst: 3. Nov 2006 11:04
von marlic
Nun, in Scheme wäre das eine Unendliche Rekursion, wenn du sowohl die Parents als auch die Children angibst. Ohne OO geht das wohl nicht ;)

Verfasst: 3. Nov 2006 15:42
von Drudge
Ich denke schon, dass es gehen würde. Man müsste allerdings zuerst alle Objekte ohne Verbindung zueinander erstellen und dann den bestehenden Objekten die Verbindungen zuweisen. ... könnte mit diesem "set"-Befehl funktionieren. Aber soweit sind wir ja noch nicht.

Verfasst: 4. Nov 2006 16:58
von gelo
Da wir die Sprache auf Anfänger mit Listen-Abkürzungen stellen sollen,
heisst das, dass wir den befehl "begin" nich verwenden dürfen?

Verfasst: 5. Nov 2006 12:51
von bruse
Im Prinzip: Ja.
Wenn du damit das Lernziel einer Aufgabenstellung umgehst, bekommst du auf jeden Fall Punkte abgezogen. Ansonsten hängt das auch ein bischen von deinem Tutor ab. Da es auf jeden Fall eineLösung ohne "begin" gibt, würde ich auch nach dieser suchen ;-)