Aufgabe 1 - Berechnete Konstanten

Edoat
Sonntagsinformatiker
Sonntagsinformatiker
Beiträge: 242
Registriert: 26. Feb 2007 15:10

Aufgabe 1 - Berechnete Konstanten

Beitrag von Edoat » 17. Jun 2010 12:59

Aufgabenblatt 1, 2.3 Änderungen der Eingabesprache hat geschrieben:Konstanten dürfen nicht mehr von Variablen abhängen
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?

tzeenie
Mausschubser
Mausschubser
Beiträge: 80
Registriert: 14. Okt 2008 20:04

Re: Aufgabe 1 - Berechnete Konstanten

Beitrag von tzeenie » 17. Jun 2010 18:13

Edoat hat geschrieben:Sind im Kontext von berechneten Konstanten var-Parameter und konstante Parameter in Prozeduren jeweils als konstant anzusehen?
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? :?

Tobias
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 132
Registriert: 20. Okt 2004 14:17
Kontaktdaten:

Re: Aufgabe 1 - Berechnete Konstanten

Beitrag von Tobias » 17. Jun 2010 19:58

Aufgabenblatt hat geschrieben:Konstanten dürfen nicht mehr von Variablen abhängen
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.

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. ;) Im Zweifelsfall sprecht nochmal Florian Stock darauf an.
Wise people talk, because they have something to say; fools, because they have to say something. (Plato)

Edoat
Sonntagsinformatiker
Sonntagsinformatiker
Beiträge: 242
Registriert: 26. Feb 2007 15:10

Re: Aufgabe 1 - Berechnete Konstanten

Beitrag von Edoat » 17. Jun 2010 21:28

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. ;)
Ok, vielen Dank.
tzeenie hat geschrieben:Was meinst Du mit var-Parametern "im Kontext von berechneten Konstanten"?
Falls es durch Tobias Antwort noch nicht klar geworden sein sollte, ich meinte sowas wie die Konstante aplus1 in folgendem konstruiertem Beispiel:

Code: Alles auswählen

proc inc(var a : Integer) ~
let
  const aplus1 ~ a * a
in begin
  a := aplus1
end
Die Konstante c hängt hier von a ab. Obwohl a ein var-Parameter ist, wird der Wert aplus1 zur Laufzeit berechnet und ist dann konstant.

Antworten

Zurück zu „Archiv“