Wolfram Language
Die Wolfram Language ist eine wissensbasierte symbolische Programmiersprache, die in Wolfram Standalone-Produkten wie Mathematica[3] 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[4] 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: | 13.0 (13. Dezember 2021[1]) |
Typisierung: | dynamisch, stark |
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)[2] |
www.wolfram.com/language & Wolfram Language.org |
Entwicklungsgeschichte
Die Wolfram Language ist seit dem Erstrelease von Mathematica im Jahr 1988 grundlegender Bestandteil des Softwarepakets.[5]
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.[6] Außerdem bietet die Sprache auch Funktionen für komplexere Aufgaben wie 3D-Modellierung.[7]
Die Wissensmaschine Wolfram Alpha wurde im Jahr 2009 als Online-Frontend der Wolfram Language veröffentlicht.[8] 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:
(* 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
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. So können Benutzer die Flexibilität genießen, Ausdrücke auf verschiedene Arten einzugeben:
- Die Wolfram Language verwendet eine Reihe von Formatierungsregeln, wie
TeXForm
für Ausdrücke im Formelsatz undInputForm
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:[9]
FullForm[1+2]
(* = Plus[1, 2] *)
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:
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:[10]
(* 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
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[11]. Dazu gibt es eine umfangreiche Dokumentation.
Die Wolfram Language wird kostenlos mit dem Raspberry-Pi-Betriebssystem mitgeliefert.[12]
Die offizielle und als Referenz dienende Implementierung der Wolfram Language liegt in Mathematica und den zugehörigen Online-Diensten. Diese sind proprietär.[13] Wolfram Research hat jedoch einen C++-Parser der Sprache unter der Open-Source-MIT-Lizenz veröffentlicht.[14] Die dazugehörige Dokumentation und Referenz ist Open Access.[15][16]
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.[17] 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.[18]
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.[3][19] 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.
Weblinks
- Dokumentation der Programmiersprache (englisch)
- Einführung in die Programmiersprache (englisch)
- Wolfram Cloud (englisch)
- WolframLanguage.org: eine Anleitung für Community Entwicklungen der Wolfram Language (englisch)
Einzelnachweise
- Wolfram Research: Wolfram Language kurze Versionsgeschichte. 30. Juni 2021, abgerufen am 17. Dezember 2021.
- Stephen Wolfram Aims to Democratize His Software by Steve Lohr, The New York Times, December 14, 2015
- Celebrating Mathematica’s First Quarter Century—Wolfram Blog. Blog.wolfram.com. Abgerufen am 5. November 2015.
- What Should We Call the Language of Mathematica?—Stephen Wolfram Blog. Blog.stephenwolfram.com. 12. Februar 2013. Abgerufen am 15. Juni 2021.
- Wolfram (1988). Mathematica, a System for Doing Mathematics By Computer.
- Brian Hayes: Thoughts on Mathematica. In: Pixel, 1. Januar 1990.
- Wolfram Language & System Documentation Center. Reference.wolfram.com. Abgerufen am 5. November 2015.
- Wolfram Alpha – die Wissensmaschine ist online. golem.de. 16. Mai 2009. Abgerufen am 15. Juni 2021.
- FullForm. In: Wolfram Language Documentation.
- Welcome to Rubi, the Rule-based Integrator. In: Rule-based Integration.
- Wolfram Language & System Documentation Center. Reference.wolfram.com. Abgerufen am 5. November 2015.
- Mathematica und Wolfram Language laufen auf dem Raspberry Pi. heise.de. 22. November 2013. Abgerufen am 15. Juni 2021.
- J McLoone: Why Wolfram Tech Isn’t Open Source—A Dozen Reasons—Wolfram Blog (en)
- codeparser: Parse Wolfram Language source code as abstract syntax trees (ASTs) or concrete syntax trees (CSTs). In: GitHub. Wolfram Research, Inc.. 13. April 2020.
- Open Materials from Wolfram: Open Code, Open Source, Open Data, Open Resources (en) In: www.wolfram.com.
- Wolfram Language & System Documentation Center. Reference.wolfram.com. Abgerufen am 5. November 2015.
- Is there an open source implementation of Mathematica-the-language?. In: Mathematica Stack Exchange.
- Programmiersprache: Wolfram Engine für Entwickler kostenfrei verfügbar (de) In: www.heise.de. Abgerufen am 17. Juni 2021.
- Stephen Wolfram Says He Has An Algorithm For Everything — Literally. Readwrite.com. Abgerufen am 5. November 2015.