Wolfram Language

langage de programmation

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.

Wolfram Language
Date de première version 1988
Développeur Stephen Wolfram
Dernière version 14.0.0 ()[1]Voir et modifier les données sur Wikidata
Influencé par APL
C
C++
Fortran
Lisp
Pascal
Prolog
Simula
Smalltalk
Symbolic Manipulation Program (en)Voir et modifier les données sur Wikidata
Licence propriétaire (disponibles gratuitement pour certaines plateformes)
Site web https://www.wolfram.com/language/
Extension de fichier m, wl, nb, cdf et wlsVoir et modifier les données sur Wikidata

Histoire

modifier

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.

Principe de base

modifier

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.

Syntaxe

modifier

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} *)


Sucre syntaxique

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 :

  • Un certain nombre de règles de mise en forme sont utilisées dans ce langage, notamment TeXForm pour les expressions dactylographiées et InputForm pour les entrées du langage.
  • Les fonctions peuvent également être appliquées à l'aide de l'expression préfixe @ et de l'expression postfixe //.
  • Les dérivés peuvent être dénotés par une apostrophe '.
  • Les opérateurs infixes eux-mêmes sont considérés comme du « sucre » pour le système de notation des fonctions.

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.

Nom du langage

modifier

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].


Voir également

modifier

Notes et références

modifier
  1. a et b (en) « The Story Continues: Announcing Version 14 of Wolfram Language and Mathematica », (consulté le )
  2. (en) « Version 12 Launches Today! (And It’s a Big Jump for Wolfram Language and Mathematica)—Stephen Wolfram Blog », sur web.archive.org, (consulté le )
  3. (en) « Wolfram Language: Programming with Built-in Computational Intelligence », sur www.wolfram.com (consulté le )
  4. (en) Expressions, guide des expressions dans le centre de documentation du langage
  5. (en) Jacob Kastrenakes, « Wolfram announces 'most important' project: a programming language that models the world », sur The Verge, (consulté le )
  6. (en) « Something Very Big Is Coming: Our Most Important Technology Project Yet—Stephen Wolfram Writings », sur writings.stephenwolfram.com, (consulté le )