Ich hatte den Satz so interpretiert, dass Konstanten von Funktionen (sowohl selbstdefinierten als auch intrinsischen wie chr() und ord()) abhängen dürfen, falls alle Parameter konstant sind bzw. selber nur aus Konstanten berechnet werden. Wie verhält es sich mit berechneten Konstanten (wie z.B. y auf Folie 51 im codegen-handout)? Sind im Kontext von berechneten Konstanten var-Parameter und konstante Parameter in Prozeduren jeweils als konstant anzusehen?Aufgabenblatt 1, 2.3 Änderungen der Eingabesprache hat geschrieben:Konstanten dürfen nicht mehr von Variablen abhängen
Aufgabe 1 - Berechnete Konstanten
Aufgabe 1 - Berechnete Konstanten
Re: Aufgabe 1 - Berechnete Konstanten
Was meinst Du mit var-Parametern "im Kontext von berechneten Konstanten"? Konstanten werden über Expressions definiert - d.h. es gibt keine var-Parameter, da hier höchstens ein Funktionsaufruf stattfinden kann (CallExpression). Funktionen sind selbst ebenfalls wieder Expressions und können keine Zuweisungen ausführen (in "unserem" Triangle). Oder hab ich da was falsch verstanden?Edoat hat geschrieben:Sind im Kontext von berechneten Konstanten var-Parameter und konstante Parameter in Prozeduren jeweils als konstant anzusehen?

Re: Aufgabe 1 - Berechnete Konstanten
Diese Einschränkung ergibt sich aus dem Verbot verschachtelter let-Blöcke und nichtlokaler Variablen. Diese zwei Verbote haben nämlich zur Folge, dass es keine Möglichkeit mehr gibt, vor einer Konstantendeklaration die verwendeten Variablen zu initialisieren. Dementsprechend wären solche Konstanten stets undefiniert. Bei Parametern gibt es dieses Problem nicht, da diese bereits vor dem Funktions- oder Prozeduraufruf ihren Wert erhalten.Aufgabenblatt hat geschrieben:Konstanten dürfen nicht mehr von Variablen abhängen
Man kann jetzt natürlich noch darüber diskutieren, was nach der Aufgabenstellung als Variable gilt. Man könnte einerseits argumentieren, dass das oben genannte Problem auf Parameter nicht zutrifft und daher nur "echte" Variablen (also Verweise auf VarDeclaration-Knoten) ausgeschlossen werden müssen.
Andererseits könnte man argumentieren, dass das Verbot nichtlokaler Variablen auch nichtlokale Parameter einschließt und analog dazu Konstanten auch nicht von Parametern abhängen dürfen. Das hätte außerdem noch den Nebeneffekt, dass Konstanten bei jedem Programmablauf denselben Wert haben und zur Kompilierzeit berechenbar sind.
Wie auch immer: Mir ist eigentlich egal, für welche Möglichkeit ihr euch entscheidet. Die Aufgabenstellung ist da nicht eindeutig und ich denke, es gibt wichtigere Probleme.

Wise people talk, because they have something to say; fools, because they have to say something. (Plato)
Re: Aufgabe 1 - Berechnete Konstanten
Ok, vielen Dank.Tobias hat geschrieben:Wie auch immer: Mir ist eigentlich egal, für welche Möglichkeit ihr euch entscheidet. Die Aufgabenstellung ist da nicht eindeutig und ich denke, es gibt wichtigere Probleme.
Falls es durch Tobias Antwort noch nicht klar geworden sein sollte, ich meinte sowas wie die Konstante aplus1 in folgendem konstruiertem Beispiel:tzeenie hat geschrieben:Was meinst Du mit var-Parametern "im Kontext von berechneten Konstanten"?
Code: Alles auswählen
proc inc(var a : Integer) ~
let
const aplus1 ~ a * a
in begin
a := aplus1
end