Wolfram Language

Mathematische Programmiersprache, welche z. B. in Wolfram Mathematica verwendet wird.

Die Wolfram Language ist eine wissensbasierte symbolische Programmiersprache, die in Wolfram Standalone-Produkten wie Mathematica[2] 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[3] 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.

Wolfram Language
Paradigmen: multiparadigmatisch: funktional, prozedural, Array-Programmierung
Erscheinungsjahr: 1988
Designer: Stephen Wolfram
Entwickler: Wolfram Research
Aktuelle Version: 14.1  (July 31, 2024)
Typisierung: dynamisch, stark
Wichtige Implementierungen: Mathematica, Wolfram Development Platform, Mathics, MockMMA
Beeinflusst von: APL, C, C++, Fortran, Lisp, Pascal, Prolog, Simula, Smalltalk, Symbolic Manipulation Program
Beeinflusste: Julia
Betriebssystem: Plattformunabhängig
Lizenz: Proprietäre Software (kostenlos verfügbar für bestimmte Plattformen)[1]
www.wolfram.com/language & Wolfram Language.org

Entwicklungsgeschichte

Bearbeiten

Die Wolfram Language ist seit der ersten Veröffentlichung von Mathematica im Jahr 1988 grundlegender Bestandteil des Softwarepakets.[4]

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.[5] Außerdem bietet die Sprache auch Funktionen für komplexere Aufgaben wie 3D-Modellierung.[6]

Die Wissensmaschine Wolfram Alpha wurde im Jahr 2009 als Online-Frontend der Wolfram Language veröffentlicht.[7] 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

Bearbeiten

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

Bearbeiten

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:

(* This is a comment. *)

4 + 3
(* = 7 *)

1 + 2 * (3 + 4)
(* = 15 *)
(* Note that Multiplication can be omitted: 1 + 2 (3 + 4) *)

(* Divisions return rational numbers: *)
3 / 2
(* = 3/2 *)

Funktionsargumente stehen in eckigen Klammern:

Sin[Pi]
(* = 0 *)

(* This is the function to convert rationals to floating points: *)
N[3 / 2]
(* = 1.5 *)

Listen werden in geschwungenen Klammern notiert:

Oddlist={1,3,5}
(* = {1,3,5} *)

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

Bearbeiten

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[8] formt die Eingabe um:

FullForm[1+2]
(* = Plus[1, 2] *)

Funktionales Programmieren

Bearbeiten

Currying wird unterstützt.

Mustervergleich

Bearbeiten

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:

F[x_] := x ^ 0

:= 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:

sortRule := {x___,y_,z_,k___} /; y>z -> {x,z,y,k}
(* Rule[Condition[List[PatternSequence[x, BlankNullSequence[]], Pattern[y, Blank[]], Pattern[z, Blank[]], PatternSequence[k, BlankNullSequence[]]], Greater[y, z]], List[x, z, y, k]] *)

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:

{ 9, 5, 3, 1, 2, 4 } //. sortRule
(* = ReplaceRepeated[{ 9, 5, 3, 1, 2, 4 }, sortRule] *)
(* = {1, 2, 3, 4, 5, 9} *)

Pattern Matching ermöglicht auch leicht eine regelbasierte Integration und Ableitung. Im Folgenden sind Auszüge aus dem Rubi-Regelpaket:[9]

(* Reciprocal rule *)
Int[1/x_,x_Symbol] :=
  Log[x];
(* Power rule *)
Int[x_^m_.,x_Symbol] :=
  x^(m+1)/(m+1) /;
FreeQ[m,x] && NeQ[m,-1]

Verbreitung und Einsatz

Bearbeiten

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[10]. Dazu gibt es eine umfangreiche Dokumentation.

Die Wolfram Language wird kostenlos mit dem Raspberry-Pi-Betriebssystem mitgeliefert.[11]

Die offizielle und als Referenz dienende Implementierung der Wolfram Language liegt in Mathematica und den zugehörigen Online-Diensten. Diese sind proprietär.[12] Wolfram Research hat jedoch einen C++-Parser der Sprache unter der Open-Source-MIT-Lizenz veröffentlicht.[13] Die dazugehörige Dokumentation und Referenz ist Open Access.[14][15]

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.[16] 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.[17]

Konnektivität und Integration

Bearbeiten

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

Bearbeiten

Obwohl die Sprache in irgendeiner Form seit mehr als 25 Jahren existiert, wurde der Name der Sprache erst im Juni 2013 offiziell bekannt gegeben.[2][18] 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.

Literatur

Bearbeiten
Bearbeiten

Einzelnachweise

Bearbeiten
  1. Steve Lohr: Stephen Wolfram Aims to Democratize His Software. The New York Times, 14. Dezember 2015.
  2. a b Stephen Wolfram: Celebrating Mathematica’s First Quarter Century. In: Wolfram Blog. 23. Juni 2013, abgerufen am 5. November 2015 (englisch).
  3. What Should We Call the Language of Mathematica? In: Stephen Wolfram Writings. 12. Februar 2013, abgerufen am 25. Januar 2024 (englisch).
  4. Wolfram (1988): Mathematica, a System for Doing Mathematics By Computer.
  5. Brian Hayes: Thoughts on Mathematica In: Pixel, 1. Januar 1990 
  6. Wolfram Language & System: Documentation Center. In: Reference.Wolfram.com. Abgerufen am 5. November 2015 (englisch).
  7. Jens Ihlenfeld: Wolfram Alpha – die Wissensmaschine ist online. In: golem.de. 16. Mai 2009, abgerufen am 15. Juni 2021.
  8. Wolfram Language function: FullForm. Wolfram Research, 2003, abgerufen am 14. Juli 2021 (englisch).
  9. Welcome to Rubi, the Rule-based Integrator. In: Rule-based Integration.
  10. Wolfram Language & System Documentation Center. Reference.wolfram.com, abgerufen am 5. November 2015.
  11. Mathematica und Wolfram Language laufen auf dem Raspberry Pi. heise.de, 22. November 2013, abgerufen am 15. Juni 2021.
  12. J McLoone: Why Wolfram Tech Isn’t Open Source—A Dozen Reasons—Wolfram Blog. (englisch).
  13. codeparser: Parse Wolfram Language source code as abstract syntax trees (ASTs) or concrete syntax trees (CSTs). In: GitHub. Wolfram Research, Inc., 13. April 2020;.
  14. Open Materials from Wolfram: Open Code, Open Source, Open Data, Open Resources. In: www.wolfram.com. (englisch).
  15. Wolfram Language & System Documentation Center. Reference.wolfram.com, abgerufen am 5. November 2015.
  16. Simon: Is there an open source implementation of Mathematica-the-language? In: Mathematica Stack Exchange.
  17. Programmiersprache: Wolfram Engine für Entwickler kostenfrei verfügbar. In: www.heise.de. Abgerufen am 17. Juni 2021.
  18. Stephen Wolfram Says He Has An Algorithm For Everything — Literally. Readwrite.com, abgerufen am 5. November 2015.