Wolfram Language | |
Date de première version | 1988 |
---|---|
Développeur | Stephen Wolfram |
Dernière version | 14.0.0 ()[1] |
Influencé par | APL C C++ Fortran Lisp Pascal Prolog Simula Smalltalk Symbolic Manipulation Program (en) |
Licence | propriétaire (disponibles gratuitement pour certaines plateformes) |
Site web | https://www.wolfram.com/language/ |
Extension de fichier | m, wl, nb, cdf et wls |
modifier |
Wolfram Language est un langage de calcul multi-paradigme[2] général développé par la société Wolfram Research. Ce langage est utilisé pour le calcul symbolique, la programmation fonctionnelle et la programmation basée sur des règles et il peut utiliser des structures et des données arbitraires[3]. C'est le langage de programmation du programme de calcul symbolique mathématique appelé Mathematica.
Le langage Wolfram faisait partie de la version initiale de Mathematica en 1988.
Les aspects symboliques du moteur en font un système de calcul formel. Le langage peut exécuter des opérations d'intégration, de différenciation, de manipulation de matrices et résoudre des équations différentielles à l'aide d'un ensemble de règles. La version initiale a également introduit le modèle de notebook et la capacité d'intégrer du son et des images, selon le brevet de Theodore Gray.
Wolfram a également ajouté des fonctionnalités pour des tâches plus complexes, telles que la modélisation 3D.
Un nom a finalement été adopté pour le langage en 2013, lorsque Wolfram Research a décidé de rendre une version du moteur de langage gratuite pour les utilisateurs de Raspberry Pi, et qu'il a fallu lui trouver un nom. Il a été inclus dans le paquet de logiciels recommandé par la Fondation Raspberry Pi pour les débutants, ce qui a suscité une certaine controverse en raison de la nature propriétaire du langage Wolfram. Après la présentation de la carte au CES 2014, des projets de migration du langage Wolfram vers l'Intel Edison ont été annoncés, mais ils n'ont jamais vu le jour.
En 2019, les bibliothèques de Wolfram sont devenues compatibles avec le moteur de jeu Unity, donnant ainsi aux développeurs de jeux un accès aux fonctions de haut niveau du langage.
Le principe de fonctionnement du langage Wolfram repose sur la manipulation d' expressions symboliques de la forme :
Head[arg1, arg2, ...]
où Head, arg1, arg2 ... sont elles-mêmes d'autres expressions ou des symboles génériques telles que des chaînes de caractères, des identificateurs, des nombres ou, lorsque l'environnement de programmation le permet, des images. Ce concept est similaire à celui définissant les S-expressions.
Certaines expressions symboliques sont interprétées comme des règles de transformations d'autres expressions symboliques. Par exemple l'expression Rule[foo, bar]
est une règle de transformation qui consiste à remplacer toute occurrence du symbole foo
dans une expression par le symbole bar
. Le langage associe certaines règles à certains symboles, et permet à l'utilisateur de définir ses propres associations, ce qui procure un mécanisme équivalent à la définition d'une routine ou d'une procédure.
L'application successive de ces règles de transformation constitue le concept unificateur qui sous-tend le paradigme de programmation symbolique du langage[4], le rendant assez proche du lambda calcul ou d'autres langages fonctionnels tels que Lisp. Plus généralement il s’agit d’un système dit de réécriture.
La syntaxe du langage Wolfram est globalement similaire à l'expression M du LISP des années 1960, avec la prise en charge des opérateurs infixes et des appels de fonction par « notation de fonction ».
Notions de base
Le langage Wolfram écrit des expressions arithmétiques de base à l'aide d'opérateurs infixes.
(* 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 *)
Les appels de fonction sont indiqués entre crochets :
Sin[Pi]
(* = 0 *)
(* This is the function to convert rationals to floating point: *)
N[3 / 2]
(* = 1.5 *)
Les listes sont placées entre des accolades :
Oddlist={1,3,5}
(* = {1,3,5} *)
Le langage peut s'écarter du paradigme de l'expression M lorsqu'il existe une autre façon, plus conviviale, de représenter une expression :
Voici une mise en forme de FullForm qui désuggère les données d'entrée :
FullForm[1+2]
(* = Plus[1, 2] *)
Programmation fonctionnelle
La curryfication est prise en charge.
Filtrage par motif
Les fonctions du langage Wolfram sont en fait un cas de motifs simples de remplacement :
F[x_] := x ^ 0
Le := est un « opérateur SetDelayed », de sorte que le x n'est pas immédiatement recherché. x_ est un sucre syntaxique pour Pattern[x, Blank[]], c'est-à-dire un « blanc » pour toute valeur remplaçant x dans le reste de l'évaluation.
Une itération du tri à bulles s'exprime comme suit :
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]]*)
L'opérateur / ; est une « condition », de sorte que la règle ne s'applique que si y>z. Les trois caractères de tiret bas sont une syntaxe pour une BlankNullSequence[], pour une séquence qui peut être nulle.
Un opérateur ReplaceRepeated //. peut être utilisé pour appliquer cette règle de manière répétée, jusqu'à ce qu'il n'y ait plus de changement :
{ 9, 5, 3, 1, 2, 4 } //. sortRule
(* = ReplaceRepeated[\{ 9, 5, 3, 1, 2, 4 }, sortRule] *)
(* = {1, 2, 3, 4, 5, 9} *)
Le système de filtrage par motif permet également de procéder facilement à une intégration et à une dérivation basées sur des règles. Voici des extraits de l'ensemble des règles de Rubi :
(* 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]
Implémentations
L'implémentation officielle et de référence du langage Wolfram se trouve dans Mathematica et les services en ligne associés. Ces derniers ne sont pas accessibles au public. Wolfram Research a toutefois publié un analyseur syntaxique C++ du langage sous la licence MIT en open source. L'ouvrage de référence est en libre accès.
Au cours des trois décennies d'existence du langage Wolfram, un certain nombre d'implémentations tierces en open source ont également été développées. MockMMA de Richard Fateman, datant de 1991, en est un exemple historique, à la fois parce qu'il s'agit de la première réimplémentation et parce qu'elle a fait l'objet d'une demande de cessation et de désistement de la part de Wolfram. Les implémentations modernes encore maintenues en avril 2020 comprennent Symja en Java, Expreduce en Golang et Mathics basé sur SymPy. Ces implémentations se concentrent sur le langage de base et le système de calcul formel qu'il implique, et non sur les fonctionnalités de la « base de connaissances » en ligne de Wolfram.
En 2019, Wolfram Research a publié un logiciel gratuit, appelé Wolfram Engine, destiné à être utilisé comme bibliothèque de programmation dans des logiciels non commerciaux.
Le langage a été officiellement nommé en juin 2013 et a été utilisé comme back-end pour Mathematica et d'autres technologies Wolfram depuis plus de 30 ans[5],[6].