In der Mathematik bedeutet eine Variable, dass Sie dort eine beliebige Zahl eingeben können, und eine Gleichung bleibt weiterhin wahr:
root(square(x)) = abs(x)
In Programmiersprachen ist dies nicht der Fall: Eine Variable kann sich ändern. In Python:
y = (x**2)**.5
x *= 2
assert y == abs(x)
löst eine Ausnahme aus, da x in der letzten Zeile nicht dasselbe ist.
Gibt es Programmiersprachen, die unveränderliche Variablen verwenden?
Antworten:
Um Ihre Titelfrage zu beantworten: "Verwendet eine Programmiersprache Variablen wie in Mathematik?": C, C #, Java, C ++ und jede andere Sprache im C-Stil verwenden Variablen so, wie sie in Mathematik verwendet werden.
Sie müssen nur == anstelle von = verwenden.
Wenn ich dein Original nehme
Dann kann ich das direkt in C # übersetzen, ohne andere Änderungen als für die Syntax vorzunehmen.
Math.Sqrt(Math.Pow(x,2)) == Math.Abs(x)
Dies wird für jeden Wert von x als wahr ausgewertet, solange x im Quadrat kleiner als das Maximum für den von Ihnen verwendeten Datentyp ist. (Java wird sehr ähnlich sein, aber ich glaube, der Math-Namespace ist etwas anders)
Dieses nächste Bit kann in C # nicht kompiliert werden, da der Compiler klug genug ist, um zu wissen, dass ich die Rückgabe einer Operation keiner anderen Operation zuweisen kann.
Math.Sqrt(Math.Pow(x,2)) = Math.Abs(x)
Unveränderlichkeit hat damit nichts zu tun. Sie müssen den Wert weiterhin in einer unveränderlichen Sprache zuweisen, und es ist durchaus möglich, dass eine bestimmte Sprache dies mit = als Operator auswählt.
Diese Schleife wird weiter ausgeführt, bis Sie die zulässigen Werte von x erschöpft haben und eine Überlaufausnahme erhalten:
Aus diesem Grund hassen Mathematiker die Verwendung von = für die Zuweisung. Es verwirrt sie. Ich denke, das hat dich dazu gebracht, dich selbst zu verwirren. Nehmen Sie Ihr Beispiel
Wenn ich daraus Algebra mache, bekomme ich folgendes:
abs (2x) = Wurzel (x ^ 2)
Was natürlich nicht für andere Werte als 0 gilt. Die Unveränderlichkeit erspart Ihnen nur den Fehler, den Wert von x zu ändern, wenn Sie zusätzliche Schritte zwischen der Bewertung der linken und rechten Seite der ursprünglichen Gleichung hinzufügen. Es ändert nichts daran, wie Sie den Ausdruck bewerten.
quelle
Rein funktionierende Programmiersprachen wie Haskell erzwingen unveränderliche Variablen. Ich nenne sie aber gerne Bezeichner anstelle von Variablen.
quelle
Das
=
in Programmiersprachen verwendete Zeichen ist irreführend.<-
, was "speichern" bedeutet, oder sogar COBOLMOVE
sollte stattdessen verwendet werden.Zusätzlich verwendet Prolog Variablen wie math: Variablen können nicht geändert werden, und die Prolog-Engine füllt die Variablen aus, um festzustellen, ob die Lösungen vorhanden sind.
Curry ist auch eine Mischung aus Haskell und Prolog.
quelle
C, C ++ und Objective-C können die Unveränderlichkeit für Funktions- (und Methoden-) Argumente sowie andere Variablen (Bezeichner) mit dem Qualifizierer vom Typ "const" angeben.
quelle
Sie können die Unveränderlichkeit auch in Python simulieren, indem Sie keine Aktualisierungen von Klassen zulassen. Wie bereits erwähnt, erzwingen die meisten reinen funktionalen Programmiersprachen die Unveränderlichkeit. Clojure wurde kürzlich zur JVM- Plattform hinzugefügt (Clojure ist ein LISP-Dialekt).
In Scala (ebenfalls eine JVM- Sprache) ist eine Vereinheitlichung der mit deklarierten OO- und FP-Unterstützungsvariablen
val
unveränderlich. Die Ausdruckskraft von Scala und die Unterstützung von OO / FP-Hybriden lassen Mathematica ähnlich aussehen . ( Akka ist ein Framework, das Scala und Java Erlang OTP- und Clojure-Funktionen wie STM .. hinzufügt .) LACASA fügt ein Typsystem und ein Programmiermodell hinzu, um die Objektfähigkeitsdisziplin in Scala durchzusetzen und eindeutige Objektreferenzen bereitzustellen. ( Code ) ( theoretischer Hintergrund )In Java ist eine deklarierte Variable
final
unveränderlich, und Java-Bibliotheken wie Google Guava enthalten unveränderliche Sammlungsbibliotheken. JavaString
s sind auch immer unveränderlich.quelle