letrec

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


Schau doch mal hier:
Alle Scheme-Funktionen


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].