Wolfram Language ( / ˈw ʊ l f r əm / WUUL -frəm ) es un lenguaje de programación multiparadigma de muy alto nivel , propietario [ 7 ] y de propósito general desarrollado por Wolfram Research . Enfatiza el cálculo simbólico , la programación funcional y la programación basada en reglas [9] y puede emplear estructuras y datos arbitrarios. [9] Es el lenguaje de programación del programa de cálculo simbólico matemático Mathematica . [10]
El lenguaje Wolfram fue parte de la versión inicial de Mathematica en 1988. [11]
Los aspectos simbólicos del motor lo convierten en un sistema de álgebra computacional. El lenguaje puede realizar integraciones, diferenciaciones, manipulaciones de matrices y resolver ecuaciones diferenciales utilizando un conjunto de reglas. Además, la versión inicial introdujo el modelo de cuaderno y la capacidad de incorporar sonido e imágenes, según la patente de Theodore Gray . [12]
Wolfram también agregó funciones para tareas más complejas, como el modelado 3D. [13]
Finalmente, en 2013 se adoptó un nombre para el lenguaje, ya que Wolfram Research decidió hacer una versión del motor del lenguaje gratuita para los usuarios de Raspberry Pi , y necesitaban encontrarle un nombre. [14] Se incluyó en el paquete de software recomendado que la Fundación Raspberry Pi proporciona para principiantes, lo que causó cierta controversia debido a la naturaleza propietaria del lenguaje Wolfram . [15] Los planes para portar el lenguaje Wolfram al Intel Edison se anunciaron después de la presentación de la placa en el CES 2014 , pero nunca se publicaron. [16] En 2019, se agregó un enlace para hacer que las bibliotecas Wolfram sean compatibles con el motor de juegos Unity , lo que brinda a los desarrolladores de juegos acceso a las funciones de alto nivel del lenguaje. [17] [18]
La sintaxis del lenguaje Wolfram es en general similar a la expresión M de LISP de los años 1960 , con soporte para operadores infijos y llamadas a funciones de "notación de función".
El lenguaje Wolfram escribe expresiones aritméticas básicas utilizando operadores infijos .
(*Esto es un comentario.*)4 + 3 (* = 7 *) 1 + 2 * ( 3 + 4 ) (* = 15 *) (* Tenga en cuenta que se puede omitir la multiplicación: 1 + 2 (3 + 4) *) (*Las divisiones devuelven números racionales: *) 6 / 4 (* = 3/2 *)
Las llamadas de función se indican con corchetes:
Pecado [ Pi ] (* = 0 *)(*Esta es la función para convertir números racionales a punto flotante: *) N [ 3 / 2 ] (* = 1.5 *)
Las listas se encierran entre llaves:
Lista impar = { 1 , 3 , 5 } (* = {1,3,5} *)
El lenguaje puede desviarse del paradigma de expresión M cuando existe una forma alternativa y más amigable para los humanos de mostrar una expresión:
TeXForm
para expresiones tipográficas y InputForm
para la entrada de idioma.@
y la expresión de sufijo //
.'
.Un FullForm
formateador desazucara la entrada: [19]
Formato completo [ 1 + 2 ] (* = Plus[1, 2] *)
Las funciones en el lenguaje Wolfram son efectivamente un caso de patrones simples de reemplazo:
F [ x_ ] := x ^ 0
El :=
es un "operador SetDelayed", por lo que no se busca x inmediatamente. x_
es un azúcar sintáctico para Pattern[x, Blank[]]
, es decir, un "espacio en blanco" para cualquier valor que reemplace a x en el resto de la evaluación.
Una iteración de ordenamiento de burbuja se expresa como:
sortRule := { x___ , y_ , z_ , k___ } /; y > z -> { x , z , y , k } (* Regla[Condición[Lista[SecuenciaPatrón[x, SecuenciaNuloBlanco[]], Patrón[y, Blanco[]], Patrón[z, Blanco[]], SecuenciaPatrón[k, SecuenciaNuloBlanco[]]], Mayor[y, z]], Lista[x, z, y, k]] *)
El /;
operador es "condición", por lo que la regla solo se aplica cuando y>z
. Los tres guiones bajos son una sintaxis para un BlankNullSequence[]
, para una secuencia que puede ser nula.
//.
Se puede utilizar un operador ReplaceRepeated para aplicar esta regla repetidamente, hasta que no se produzcan más cambios:
{ 9 , 5 , 3 , 1 , 2 , 4 } // .sortRule (* = ReemplazarRepetido[{ 9, 5, 3, 1, 2, 4 }, sortRule] *) ( * = {1, 2, 3, 4, 5, 9} *)
El sistema de comparación de patrones también da lugar fácilmente a la integración y derivación basadas en reglas. A continuación se presentan extractos del paquete de reglas de Rubi: [20]
(* Regla recíproca *) Int [ 1 / x_ , x_Símbolo ] := Log [ x ]; (* Regla de potencia *) Int [ x_ ^ m_ . , x_Símbolo ] := x ^ ( m + 1 ) / ( m + 1 ) /; FreeQ [ m , x ] && NeQ [ m , -1 ]
La implementación oficial y de referencia de Wolfram Language se encuentra en Mathematica y los servicios en línea asociados. Estos son de código cerrado. [21] Sin embargo, Wolfram Research ha publicado un analizador del lenguaje bajo la licencia MIT de código abierto . [22] El analizador se desarrolló originalmente en C++, pero se reescribió en Rust en 2023. El libro de referencia es de acceso abierto . [23]
En las más de tres décadas de existencia del lenguaje Wolfram, también se han desarrollado varias implementaciones de terceros de código abierto . MockMMA de Richard Fateman de 1991 es de importancia histórica, tanto por ser la primera reimplementación como por haber recibido una orden de cese y desistimiento de Wolfram. Las implementaciones modernas que aún se mantienen en abril de 2020 [update]incluyen Symja en Java , expreduce en Golang y Mathics basado en SymPy . [24] Estas implementaciones se centran en el lenguaje central y el sistema de álgebra computacional que implica, no en las características de "base de conocimiento" en línea de Wolfram.
En 2019, [25] Wolfram Research lanzó el software gratuito Wolfram Engine, para ser utilizado como una biblioteca de programación en software no comercial. Este motor exclusivo para desarrolladores proporciona un shell de línea de comandos del evaluador de Mathematica (con una cantidad limitada de núcleos) y requiere registro y activación de la licencia a través de la web. El proyecto Jupyter Notebook/Lab, disponible de forma gratuita, proporciona un protocolo (ZMQ) para conectar sus cuadernos a varios idiomas; está disponible como una alternativa a la interfaz CLI de solo texto a través del núcleo Wolfram para Jupyter. [26]
El lenguaje recibió su nombre oficialmente en junio de 2013 y se ha utilizado como back-end de Mathematica y otras tecnologías Wolfram durante más de 30 años. [27] [28]