Wolfram Language
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. HistoireLe 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.
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 baseLe 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 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. SyntaxeLa 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 ».
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] *)
La curryfication est prise en charge.
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]
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 langageLe 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 égalementNotes et références
|
Portal di Ensiklopedia Dunia