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.
letrec
hallo
weiss jemand welchen vorteil letrec gegenüber let* hat?
let und let* ist klar, nur was kann letrec was let* nicht kann?
könnte mir jemand ein beispiel dafür geben?
danke
Drager
letrec kann wie der name schon sagt rekurive prozeduren herstellen. let* kann halt einfach seine eigenen zuweisungen für andere eigene zuweisungen verweden … also nicht parallel wie bei let …
ich kann mir letrec gut mit dem görz sein “behälter-kalkül” vorstellen:
bei (letversion ((a 1) (b a)))
let und let* schauen ob a lokal einen w4ert hat und dann weisen sie den b zu, hat a keinen wert wird in der übergeordneten umgebung geschaut (usw).
letrec erstellt erst diese ominösen behälter dann lässt sie b auf a zeigen. damit wird b a zugewiesen obwohl a noch nicht ausgewertet ist. und so solls ja sein
Ich merks mir auch immer so wie der Poll, mit Let und Let* kannst du keine Rekursiven Prozeduren basteln
(zb: Letrec ((fn (lambda (x) (if (= 0 x) 1 (* x (fn (- x 1))) blablabla. Das kannst du mit Let und Let* vergessen, ausser du benutzst ein benanntes let.
Der einzige Fall den ich weiß, wo man [FONT=courier new]letrec[/FONT] braucht, ist die wechselseitige Rekursion, also 2 Funktionen die sich gegenseitig aufrufen, so wie im Beispiel von [FONT=courier new]even?[/FONT] und [FONT=courier new]odd?[/FONT].