Dynamic Programming Language
Dynamic Programming Language, kurz DPL, ist mehr ein Programmierparadigma als eine Programmiersprache
Programme in DPL können imperativ oder deklarativ, funktional oder objektorientiert aufgebaut sein. Tatsächlich werden die Programme aber nicht Schritt für Schritt abgearbeitet, sondern beschreiben ein permanent wirkendes Regelsystem.
Ein wenig vergleichbar ist die Wirkungsweise mit einer Tabellenkalkulation: Ändert sich der Inhalt einer Zelle, werden automatisch alle Zellen aktualisiert, die über eine Formel mit dieser Zelle direkt oder indirekt verbunden sind.
Eingabe:
a = 1 ? a // ... println a a = 2
Ausgabe:
2
Wirkungsweise:
Zeile 1 der Eingabe erzeugt eine Variable a und setzt ihren Wert auf 1. Zeile 2 Gibt den Wert von a, also (scheinbar) 1, z.B. auf dem Bildschirm aus. Jedoch ist diese Ausgabe eine permanent wirkende Regel und nicht ein abgeschlossener Vorgang. Dadurch, daß in der folgenden Zeile der Wert von a auf 2 gesetzt wird, steht in der Ausgabe tatsächlich 2.
Die Zeilen 1 und 3 stellen an sich einen Widerspruch dar, da eigentlich beide Regeln gleichzeitig gelten. Es ist mit der Position im Code keine zeitliche Abfolge angegeben.
In der Elektronik würde das z.B. etwa der Parallelschaltung zweier unterscheidlicher Spannungsquellen an einen Verbraucher entsprechen. Das Ergebnis wäre, vereinfacht, abhängig vom Innenwiderstand der Spannungsquellen und vom Widerstand des Verbauchers.
Als Konvention wird hier angenommen, daß die zu letzt eingegebene Regel höher prioisiert ist und a damit den Wert 2 hat. Es bleibt aber zu bemerken, daß a zu keinem Zeitpunkt jemals den Wert 1 hatte, da, wie bereits dargelegt, hier keine zeitliche Abfolge vorliegt.
Funktionen gelten immer im Kontext ihrer Anwendung.
double(@x -> @x * 2) a = 1 b = double(a) ? b
Regeln wirken auch rückwärts:
double(@x -> @x * 2) b = double(a) b = 6 ? a
Ausgabe:
3
Elastizität:
b = max(5) a = 6 b = a ? a
Ausgabe:
5
Der Operator '=' beschreibt, wie in der Mathematik, das linker und rechter Term gleich sind. Es handelt sich nicht um eine Zuweisung. Deshalb ist es egal, ob man
b = double(a)
oder
double(a) = b
schreibt.
Es ist unerheblich, ob man
a=1 b=a
oder
b=a a=1
schreibt.
Folgender Code ist nicht gültig:
a = double(a)
Er würde eine Rekursion darstellen. Jedoch ist ein ähnliches Konstrukt unter bestimmten Bedingungen möglich und beschreibt dann eine Elastizität.
Variablen mit '@' am Anfang beschreiben abstrakte Werte oder Objekte (also Klassen).
Objekte können Public Members enthalten. Diese Members können von außen gesetzt oder gelesen werden. Das Setzten oder Lesen der Member ist ebenfalls eine permanent wirkende Regel. Dabei ist Setzen oder Lesen eigentlich der falsche Ausdruck, stammend von einem anderen Programmierparadigma. Es wird tatsächlich lediglich beschrieben, das etwas gleich ist bzw. gleich sein soll.
(c) Stefan Triess