This article has multiple issues. Please help
improve it or discuss these issues on the
talk page. (
Learn how and when to remove these template messages)
|
Paradigm | Multi-paradigm: term-rewriting, functional, procedural, array |
---|---|
Designed by | Stephen Wolfram |
Developer | Wolfram Research |
First appeared | 1988 |
Stable release | 14.0.0
[1]
/ January 9, 2024 |
Typing discipline | Dynamic, strong |
OS | Cross-platform |
License | Proprietary |
Filename extensions | .nb, .m, .wl |
Website |
www |
Major implementations | |
Mathematica, Mathics, Expreduce, MockMMA | |
Influenced by | |
Influenced | |
The Wolfram Language ( /ˈwʊlfrəm/ WUUL-frəm) is a proprietary, [7] general very high-level multi-paradigm programming language [8] developed by Wolfram Research. It emphasizes symbolic computation, functional programming, and rule-based programming [9] and can employ arbitrary structures and data. [9] It is the programming language of the mathematical symbolic computation program Mathematica. [10]
The Wolfram Language was a part of the initial version of Mathematica in 1988. [11]
Symbolic aspects of the engine make it a computer algebra system. The language can perform integration, differentiation, matrix manipulations, and solve differential equations using a set of rules. Also, the initial version introduced the notebook model and the ability to embed sound and images, according to Theodore Gray's patent. [12]
Wolfram also added features for more complex tasks, such as 3D modeling. [13]
A name was finally adopted for the language in 2013, as Wolfram Research decided to make a version of the language engine free for Raspberry Pi users, and they needed to come up with a name for it. [14] It was included in the recommended software bundle that the Raspberry Pi Foundation provides for beginners, which caused some controversy due to the Wolfram language's proprietary nature. [15] Plans to port the Wolfram language to the Intel Edison were announced after the board's introduction at CES 2014 but was never released. [16] In 2019, a link was added to make Wolfram libraries compatible with the Unity game engine, giving game developers access to the language's high level functions. [17] [18]
The Wolfram Language syntax is overall similar to the M-expression of 1960s LISP, with support for infix operators and "function-notation" function calls.
The Wolfram language writes basic arithmetic expressions using infix operators.
(* 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: *)
6 / 4
(* = 3/2 *)
Function calls are denoted with square brackets:
SinPi
(* = 0 *)
(* This is the function to convert rationals to floating point: *)
N3 / 2
(* = 1.5 *)
Lists are enclosed in curly brackets:
Oddlist={1,3,5}
(* = {1,3,5} *)
The language may deviate from the M-expression paradigm when an alternative, more human-friendly way of showing an expression is available:
TeXForm
for typeset expressions and InputForm
for language input.@
and the postfix expression //
.'
.A FullForm
formatter desugars the input:
[19]
FullForm1+2
(* = Plus[1, 2] *)
Currying is supported.
Functions in the Wolfram Language are effectively a case of simple patterns for replacement:
Fx_ := x ^ 0
The :=
is a "SetDelayed operator", so that the x is not immediately looked for. x_
is syntax sugar for Pattern[x, Blank[]]
, i.e. a "blank" for any value to replace x in the rest of the evaluation.
An iteration of bubble sort is expressed as:
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]] *)
The /;
operator is "condition", so that the rule only applies when y>z
. The three underscores are a syntax for a BlankNullSequence[]
, for a sequence that can be null.
A ReplaceRepeated //.
operator can be used to apply this rule repeatedly, until no more change happens:
{ 9, 5, 3, 1, 2, 4 } //. sortRule
(* = ReplaceRepeated[{ 9, 5, 3, 1, 2, 4 }, sortRule] *)
(* = {1, 2, 3, 4, 5, 9} *)
The pattern matching system also easily gives rise to rule-based integration and derivation. The following are excerpts from the Rubi package of rules: [20]
(* Reciprocal rule *)
Int1/x_,x_Symbol :=
Logx];
(* Power rule *)
Intx_^m_.,x_Symbol :=
x^(m+1)/(m+1) /;
FreeQm,x && NeQm,-1
The official, and reference, implementation of the Wolfram Language lies in Mathematica and associated online services. These are closed source. [21] Wolfram Research has, however, released a parser of the language under the open source MIT License. [22] The parser was originally developed in C++ but was rewritten in Rust in 2023. The reference book is open access. [23]
In the over three-decade-long existence of the Wolfram language, a number of open source third party implementations have also been developed. Richard Fateman's MockMMA from 1991 is of historical note, both for being the earliest reimplementation and for having received a cease-and-desist from Wolfram. Modern ones still being maintained as of April 2020 [update] include Symja in Java, expreduce in Golang, and the SymPy-based Mathics. [24] These implementations focus on the core language and the computer algebra system that it implies, not on the online "knowledgebase" features of Wolfram.
In 2019, [25] Wolfram Research released the freeware Wolfram Engine, to be used as a programming library in non-commercial software. [26]
The language was officially named in June 2013 and has been used as the backend of Mathematica and other Wolfram technologies for over 30 years. [27] [28]