Das Konzept von J.v. Neumann sieht vor, dass Daten und Befehle in gleicher Weise unter bestimmten Adressen gespeichert werden. Dieses Konzept ermöglicht also das Ansprechen von Speicherinhalten über die Adressen.
In den höheren Programmiersprachen ermöglicht diese Konzeption eine besonders elegante Form der Formulierung von Lösungsschritten. Es handelt sich dabei um den Umgang mit Variablen, die bei mathematiktypischen Formulierungen vielfach auftreten.
In der Mathematik sind Variablen ‘Platzhalter’ für Elemente aus einer bestimmten Definitionsmenge. Mit Variablen können mathematische Ausdrücke für alle diese Elemente in einfacher Form geschrieben werden.
Üblich ist z.B. die Formulierung des Kommutativgesetzes für die Addition von reellen Zahlen in der Form a + b = b + a , wobei a und b Variablen für reelle Zahlen sind. Die Formel ist eigentlich eine Abkürzung für die wahre Aussage  Hierbei ist vereinbart, dass für a (und entsprechend für b) in der Formel jeweils die selbe Zahl einzusetzen ist.
In mathematischer Schreibweise kann x = 2 zwei unterschiedliche Bedeutungen haben: Es kann heißen, dass eine Gleichung gegeben ist (deren Lösung 2 ist, wenn x aus R ist). Es kann sich aber auch um die Zuweisung des Wertes 2 für die Variable x handeln. Welche Bedeutung gemeint ist, muss sich aus dem Zusammenhang mit anderem Text ergeben.
Beim Formulieren eines Computerprogramms muss aber klar sein, ob eine Gleichung (ein Vergleich) oder eine Wertzuweisung an eine Variable gemeint ist. Deshalb weicht die Syntax in Programmiersprachen von der mathematiküblichen Form ab. Beispiele:
In Derive wird für die Zuweisung x := 2 geschrieben und für die Gleichung x = 2 . Wird also in einem Derive-Programm x := 2 geschrieben, dann wird x im folgenden mathematischen Text stets durch 2 ersetzt. Wird dagegen x = 2 geschrieben, hat x damit keinen Wert zugewiesen bekommen, x bleibt eine freie Variable.
In Javascript wird für die Zuweisung x = 2 geschrieben und für die Gleichung x == 2.
Beim Programmieren spielt gerade die Wertzuweisung eine besondere Rolle. Allerdings erhält sie hier eine Bedeutung, die von der mathematischen Bedeutung abweicht. Schreibt man in Derive z.B. x:= x + 2, so gilt nicht mehr, dass für x jeweils der gleiche Wert einzusetzen ist, sondern diese Zuweisung erfolgt in bestimmtem, zeitlichen Ablauf: Die Auswertung des Ausdrucks beginnt rechts vom Zuweisungszeichen. Hier wird der bisherige Wert für x eingesetzt und der Wert des Terms wird berechnet. Dann wird dieser Wert zum neuen Wert von x. Die Zuweisung kann also den aktuellen x-Wert ändern. Beispiel in Derive:
x := 3 , x := 3x + 1 bewirkt, dass zunächst x den Wert 3 erhält und im nächsten Befehl den Wert 10.
Gerade bei Programmschleifen zeigt sich der Nutzen einer solchen Syntax. Man kann bei Schleifendurchläufen Variablenwerte ändern, ohne den Text der Schleife ändern zu müssen.
Beispiel in Derive:
x:=0, summe:=0, loop(x:=x+1, summe:=summe+x, if(x=9, exit)), return summe
Hiermit wird 1 + 2 + 3 + 4 + ...+ 9 = 45 berechnet und 45 wird ausgegeben.
In der Programmiersprache scheint sich der Umgang mit Wertzuweisungen schwieriger zu gestalten, da die Werte von Variablen links und rechts vom Zuweisungszeichen unterschieden werden müssen. Erstaunlicher Weise ist das im Prinzip aber nicht so. Das geschieht durch die unmittelbare Umsetzung des J.v. Neumann-Konzepts: Die Adresse eines Speicherplatzes steht für die Variable und der Inhalt für den Wert der Variablen. x := x + 2 bedeutet dann, dass auf den Inhalt von x 2 addiert wird. Nach der Addition ist der Inhalt von x also um 2 vergrößert worden. Man schreibt auch
[x] = [x] +2. Das wird gelesen als ‘Der neue Inhalt von x ist der alte Inhalt von x, auf den 2 addiert wird’.
Die Wertzuweisung kann direkt umgesetzt werden in eine Folge von Modellrechner-Befehlen.
Sei 10 die Adresse für x, dann kann für x:=x+7 diese Folge von Befehlen geschrieben werden:
0 def 7
1 lda 10
2 add 0
3 sta 10
|