"if" / "cond" / special forms / Terminierungsprobleme
2002-02-18 16:14
Faleiro
In Aufgabe 5 auf Blatt 5 war die Frage zu beantworten, warum Alyssa P. Hacker Probleme kriegt, wenn sie ein "new-if" definiert, das mit Hilfe von "cond" geschrieben ist, sich aber genauso verhalten soll wie "if".
Die Antwort – auch laut Musterlösung – ist, daß cond im Gegensatz zu if ja nicht den Status einer special form habe. Daher würde es immer ("vorgezogene Auswertung") auch den else-Teil auswerten wollen, ehe es sich "entscheidet", was halt zu einer Endlosschleife führt.
Aber: Im Skript steht eindeutig, cond sei eben doch eine special form.
Ist nun cond eine special from, aber dennoch der vorgezogenen Auswertung unterworfen?
Oder verliert cond den Status der special form, wenn es in eine Funktion eingebaut ist? Nö, kann nicht sein, sind doch alles Funktionen hier.
Je mehr ich darüber nachdenke, desto weniger verstehe ich, warum es hier überhaupt Probleme gibt. Ich habe Dutzende von Malen cond in Rekursionen verwendet, und nie gab es dabei Terminierungsprobleme.
Jetzt bin ich verwirrt. Zaphod, hilf mir! ;-)
Die Antwort – auch laut Musterlösung – ist, daß cond im Gegensatz zu if ja nicht den Status einer special form habe. Daher würde es immer ("vorgezogene Auswertung") auch den else-Teil auswerten wollen, ehe es sich "entscheidet", was halt zu einer Endlosschleife führt.
Aber: Im Skript steht eindeutig, cond sei eben doch eine special form.
Ist nun cond eine special from, aber dennoch der vorgezogenen Auswertung unterworfen?
Oder verliert cond den Status der special form, wenn es in eine Funktion eingebaut ist? Nö, kann nicht sein, sind doch alles Funktionen hier.
Je mehr ich darüber nachdenke, desto weniger verstehe ich, warum es hier überhaupt Probleme gibt. Ich habe Dutzende von Malen cond in Rekursionen verwendet, und nie gab es dabei Terminierungsprobleme.
Jetzt bin ich verwirrt. Zaphod, hilf mir! ;-)