# Wolfram Language

Die Wolfram Language ist eine wissensbasierte symbolische Programmiersprache, die in Wolfram Standalone-Produkten wie Mathematica oder in Wolfram Cloud-Produkten genutzt werden kann. Sie verfügt über eingebaute Funktionen, Algorithmen und Wissensdatenbanken und umfassende Automatisierung. Sie unterstützt mehrere Programmierparadigmen, z. B. die funktionale, symbolische, regelbasierte Programmierung, und zählt zu den höheren Programmiersprachen. Die Wolfram Language kann insbesondere Strukturen, Grafiken und (externe) Daten unterschiedlichster Formate als symbolische Ausdrücke verarbeiten. Sie bietet damit neben numerischen Lösungsverfahren auch die Möglichkeit, Formeln und Daten symbolisch zu manipulieren.

## Entwicklungsgeschichte

Die Wolfram Language ist seit der ersten Veröffentlichung von Mathematica im Jahr 1988 grundlegender Bestandteil des Softwarepakets.
Die symbolischen Aspekte der Engine machen die Wolfram Language zu einem Computeralgebrasystem. Die Sprache kann Integration, Differenzierung, Matrixmanipulationen durchführen und Differentialgleichungen mit Hilfe einer Reihe von Regeln lösen. Ebenfalls im Jahr 1988 wurde das Notebook-Modell und die Fähigkeit, Ton und Bilder einzubetten, gemäß dem Patent von Theodore Gray eingeführt. Außerdem bietet die Sprache auch Funktionen für komplexere Aufgaben wie 3D-Modellierung.
Die Wissensmaschine Wolfram Alpha wurde im Jahr 2009 als Online-Frontend der Wolfram Language veröffentlicht. Wolfram implementierte diese Website, indem es Aussagen in natürlicher englischer Sprache in Abfragen in Wolfram-Sprache übersetzte, die auf seine Datenbank verweisen. Die Arbeit, die zu Wolfram Alpha führt, bedeutet auch, dass Wolframs Implementierung der Sprache nun über einen eingebauten Zugang zu einer Wissensdatenbank sowie Funktionen zur Verarbeitung natürlicher Sprache verfügt.

## Sprachdesign
### Syntax

Die Wolfram Language hat eine umfangreiche Syntax, die sorgfältig auf Kompatibilität, Konsistenz und effiziente, lesbare Eingabe der unterschiedlichen sprachlichen, mathematischen und andersformatigen Konstrukte der Wolfram Language ausgelegt ist. Zusätzlich zur normalen linearen ASCII-Eingabe unterstützt die Wolfram Language auch die mathematische 2D-Eingabe.
Die Syntax der Wolfram Language ähnelt im Großen und Ganzen den M-Expressions von Lisp, mit Unterstützung für Infix-Operatoren und Funktionsaufrufe mit „Funktions-Notation“.

### Eigenschaften

Alle Datenobjekte in Mathematica sind in Listenstrukturen notiert. Eine Listenstruktur besteht aus zwei Teilen, dem Listenkopf und den Argumenten.
Natürliche und ganze Zahlen werden als Ziffernfolge mit oder ohne Vorzeichen (+ oder -) eingegeben. Ganze Zahlen haben den Listenkopf Integer. Integer-Zahlen können beliebig groß sein und sie werden von Mathematica exakt verarbeitet. Ebenso wie die ganzen Zahlen werden auch die rationalen Zahlen exakt ohne Rundungsfehler weiterverarbeitet.
Die Wolfram Language schreibt grundlegende arithmetische Ausdrücke in der Infixnotation:
Funktionsargumente stehen in eckigen Klammern:
Listen werden in geschwungenen Klammern notiert:

### Symbole

Symbole dienen als Platzhalter für alle erdenklichen Mathematica-Ausdrücke und als Namensgeber für Typendeklarationen oder Operationen.
Eingebaute Symbole beginnen mit einem Großbuchstaben.

### Syntaktischer Zucker

Die Wolfram Language kann von der so genannten M-Expression-Notation (angelehnt an FORTRAN und Lisp) abweichen, wenn eine alternative, (für Menschen) leichter lesbare Art der Darstellung eines Ausdrucks verfügbar ist (sog. syntaktischer Zucker). So haben Benutzer die Flexibilität, Ausdrücke auf verschiedene Arten einzugeben:
* Die Wolfram Language verwendet eine Reihe von Formatierungsregeln, wie TeXForm für Ausdrücke im Formelsatz und InputForm für Eingaben in natürlicher Sprache.
* Funktionen können auch mit dem Präfix-Ausdruck @ und dem Postfix-Ausdruck // geschrieben werden.
* Ableitungen können mit einem Apostroph ' gekennzeichnet werden.
* Die Infix-Notation findet man gewöhnlich bei + , * und anderen Operatoren im Funktionsnotationssystem.
Ein FullForm-Operator formt die Eingabe um:

### Funktionales Programmieren

Currying wird unterstützt.

### Mustervergleich

Muster stehen für Klassen von Ausdrücken. Das grundlegende Musterkonstrukt _ (sprich: „blank“) steht für jeden beliebigen Ausdruck. Funktionen sind in der Wolfram Language im Grunde genommen einfache Muster, die ersetzt werden können:
:= ist ein „SetDelayed“-Operator, so dass das x nicht sofort gesucht wird. x_ ist Syntaxzucker für Pattern[x, Blank], d. h. ein „Leerzeichen“ für einen beliebigen Wert, der x im weiteren Verlauf der Auswertung ersetzen soll.
Eine Bubblesort-Iteration wird folgendermaßen ausgedrückt:
Der /;-Operator ist „Bedingung“, so dass die Regel nur bei y>z gilt. Die drei Unterstriche sind eine Syntax für eine BlankNullSequence, eine Sequenz, die null sein kann.
/. bedeutet „ersetze überall“.
Ein ReplaceRepeated //.-Operator kann verwendet werden, um diese Regel wiederholt anzuwenden, bis keine Änderung mehr erfolgt:
Pattern Matching ermöglicht auch leicht eine regelbasierte Integration und Ableitung. Im Folgenden sind Auszüge aus dem Rubi-Regelpaket:

## Verbreitung und Einsatz

Die Wolfram Language ist für macOS, Linux und Windows erhältlich. Die Wolfram Engine läuft auf dem Desktop, in der Cloud und auf Mobilgeräten (iOS und Android) und wird von den gängigen Internetbrowsern unterstützt.
Mit über 6000 Befehlen sind die Anwendungsgebiete der Wolfram Language breit gestreut. Als Softwarepaket Mathematica wird die Wolfram Language vorwiegend in technischen, mathematischen und naturwissenschaftlichen Kursen an Universitäten, aber auch in Forschungseinrichtungen und Laboren verwendet. Zum Beispiel enthält sie eingebaute Funktionen zur Erzeugung und Ausführung von Turing-Maschinen, zur Erstellung von Grafiken und Audio, zur Erzeugung und Analyse von 3D-Grafiken und -Modellen, zur Manipulation von Matrizen und zum Lösen von Differentialgleichungen. Dazu gibt es eine umfangreiche Dokumentation. Im Wolfram Function Repository kann die Wolfram-Community seit 2019 zudem öffentliche Standalone-Funktionen zur Wolfram Language beitragen, die sofort in dieser einsetzbar sind. Wolfram Language bietet integrierten Zugriff auf die Wolfram Knowledgebase, die auch Wolfram Alpha antreibt und aktuelle Daten aus der echten Welt in Tausenden von Bereichen enthält und zur Berechnung bereitstellt.
Die Wolfram Language wird kostenlos mit dem Raspberry-Pi-Betriebssystem mitgeliefert.
Die offizielle und als Referenz dienende Implementierung der Wolfram Language liegt in Mathematica und den zugehörigen Online-Diensten. Diese sind proprietär. Wolfram Research hat jedoch einen C++-Parser der Sprache unter der Open-Source-MIT-Lizenz veröffentlicht. Die dazugehörige Dokumentation und Referenz ist Open Access.
Im über dreißigjährigen Bestehen der Wolfram Language wurden auch eine Reihe von Open-Source-Implementierungen von Drittanbietern entwickelt. Von historischer Bedeutung ist Richard Fatemans MockMMA von 1991. Moderne Implementierungen, die immer noch gepflegt werden, sind Symja in Java, expreduce in Go und das auf SymPy basierende Mathics. Diese Implementierungen konzentrieren sich auf die Kernsprache und das Computer-Algebra-System, das sie impliziert, nicht auf Wolframs Online-„Wissensdatenbank“-Funktionen.
2019 veröffentlichte Wolfram Research eine kostenfreie Version der Wolfram Engine, die als Softwarekomponente für die Entwicklung, jedoch nicht zu kommerziellen Zwecken verwendet werden kann.

## Konnektivität und Integration

Die Wolfram Language kann an viele Schnittstellen, Dienste, Geräte, Programmiersprachen, Dienste, Formate u. a. angebunden werden. Sie bietet native Unterstützung für C, C++, Java, .NET und R. Python und NodeJS können direkt aus der Wolfram Language heraus aufgerufen werden.

## Namensgebung

Obwohl die Sprache in irgendeiner Form seit mehr als 25 Jahren existiert, wurde der Name der Sprache erst im Juni 2013 offiziell bekannt gegeben. Davor wurde sie intern mit verschiedenen Namen bezeichnet, wie „M“ und „Wolfram Language“. Viele andere mögliche Namen wurden in Betracht gezogen, wie „Lingua“ und „Express“. Häufig wird die Wolfram Language synonym mit „Mathematica“ bezeichnet, wobei es sich jedoch um die Hauptimplementierung der Wolfram Language handelt.