FB18 - Das Forum für Informatik

fb18.de / Diplom Informatik / Unterbereich Grundstudium / Praktische Informatik

"if" / "cond" / special forms / Terminierungsprobleme

"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! ;-)

Re: "if" / "cond" / special forms / Terminierungsprobleme 2002-02-18 16:49
Slater
ich bin zwar nicht zappo, aber:

cond ist unbestritten (weiss jetzt nicht was in der musterlösung steht) eine special-form, innerhalb von new-if läuft alles super,
wenn man allerdings in einer anderen funktion, wie fact-iter auf dem blatt 5, nwe-if verwenden will,
dann hat man den aufruf new-if, der wie if aussieht, aber (NEW-IF …..) ist eben ein [img]http://images.rapidforum.com/images/i4.gif[/img] funktionsaufruf [img]http://images.rapidforum.com/images/i4.gif[/img] und keine bekannte special form,
somit wird, bevor new-if dann aufgerufen wird (worin dann alles korrekt abliefe) erst mal die parameter von (NEW-IF ….) ausgewertet, also auch der parameter ELSE-CLAUSE, bevor das PREDICATE überhaupt was entscheiden kann,
im ungünstigen falle führt diese auswertung zu endlosrekursion, error oder sonst was,
so erst mal klar?

Re: "if" / "cond" / special forms / Terminierungsprobleme 2002-02-18 17:38
Zaphod
Hmmm…also ich habe noch nicht begriffen, warum du unbedingt new-if oder my-if oder so verwenden willst…? Es gibt das doch einfach…über sowas mache ich mir einfach keine Gedanken.

Zum COND:
1. cond ist special form, denn die Reihenfolge der Auswertungen ist entscheident (ich glaube, das war das Kriterium).
2. Der else-Fall wird NICHT immer ausgeführt, sondern eben genau dann, wenn die davor stehenden Bedingungen nicht zutreffen.

Beispiel:

(define a 1) (cond ((= a 0) 'klapptnicht) ((= a 1) 'funktioniert) (else 'klapptnicht)) ;==> funktioniert
und nicht etwa: funktioniert klapptnicht


Re: "if" / "cond" / special forms / Terminierungsprobleme 2002-02-18 18:06
Faleiro
Ich würde mir darüber ja auch keine Gedanken machen, aber es ist eine Verständnisfrage, die ich nicht (mehr) verstehe. Schau dir doch mal die Aufgaben an! ;-)


Slater: …richtig, dann wird new-if aufgerufen, und darin ist ein cond. Wenn nun cond sich "brav" verhält und intelligenterweise nicht alles sofort auswerten will, warum kommt es dann zur Endlosschleife?

…ähh…örks… jetzt ist der Groschen gefallen. Verdammt. Er geht eben *nicht* rein ins new-if. Args. Hätte man das nicht ein bißchen klarer erklären können in der Musterlösung?

Danke, jetzt weiß ich das endlich.
Ich dachte tatsächlich bis gestern, die Aufgabe würde uns den Unterschied zwischen if (special form) und cond (Terminierungsprobleme) erklären.
Gestern fiel mir dann auf, daß zwischen if und cond prinzipiell kein Unterschied besteht und ich verstand gar nix mehr.
Jetzt checke ich endlich, daß die Aufgabe den Unterschied zwischen "if / cond direkt" und "if / cond in einer Funktion gekapselt" verdeutlichen will…


Re: "if" / "cond" / special forms / Terminierungsprobleme 2002-02-18 18:09
Slater
ja ich hab mir extra mit ausrufezeichen solche mühe gegeben…

Re: "if" / "cond" / special forms / Terminierungsprobleme 2002-02-18 19:49
Faleiro
ja ich hab mir extra mit ausrufezeichen solche mühe gegeben…
Hä?


Re: "if" / "cond" / special forms / Terminierungsprobleme 2002-02-18 20:32
Slater
nicht weiter beachten, was ich so dahinrede