A Wolfram Language (/ˈwʊlfrəm//ˈwʊlfrəm/ WUUL-frəm-frəm) é uma linguagem de programação multiparadigma geral proprietária [1] de alto nível [2] desenvolvida pela Wolfram Research, que serve como a principal linguagem de interface do Mathematica.
Foi concebida para ser o mais abrangente possível, com ênfase em computação simbólica, programação funcional e programação baseada em regras.[3] É construída de modo a representar estruturas e dados arbitrários.[3]
A linguagem é bastante extensa, abrangendo vários domínios, muitos deles especializados. Ela inclui, por exemplo, funções integradas para a geração e execução de máquinas de Turing, a criação de gráficos e áudio, a análise de modelos 3D e a resolução de equações diferenciais.
História
A Wolfram Language fez parte da versão inicial do Mathematica em 1988. [4]
Aspectos simbólicos do engine fazem dele um sistema de álgebra computacional. A linguagem pode realizar integração, diferenciação, manipulações de matrizes e resolver equações diferenciais usando um conjunto de regras. Além disso, a versão inicial introduziu o modelo de notebook e a capacidade de incorporar som e imagens, conforme patente de Theodore Gray . [5]
A Wolfram também adicionou recursos para tarefas mais complexas, como modelagem 3D. [6]
Um nome foi finalmente adotado para a linguagem em 2013, quando a Wolfram Research decidiu tornar uma versão do mecanismo de linguagem gratuita para usuários do Raspberry Pi, e eles precisavam encontrar um nome para ela. [7] Foi incluída no pacote de software recomendado que a Raspberry Pi Foundation fornece para iniciantes, o que causou alguma polêmica devido à natureza proprietária da Wolfram Language. [8] Em 2019, foi adicionado um link para tornar as bibliotecas Wolfram compatíveis com o game engine Unity, dando aos desenvolvedores de jogos acesso às funções de alto nível da linguagem. [9] [10]
Sintaxe
A sintaxe da Wolfram Language é globalmente semelhante à expressão M do LISP dos anos 1960, com suporte para operadores infixos e chamadas de função de "notação de função".
Fundamentos
A Wolfram Language escreve expressões matemáticas básicas usando operadores infixos.
(* Esse é um comentário. *)
4 + 3
(* = 7 *)
1 + 2 * (3 + 4)
(* = 15 *)
(* Observe que a multiplicação pode ser omitida: 1 + 2 (3 + 4) *)
(* Divisões retornam números racionais: *)
6 / 4
(* = 3/2 *)
Chamadas de função são indicadas com colchetes:
Sin[Pi]
(* = 0 *)
(* Esta é a função para converter números racionais em ponto flutuante: *)
N[3 / 2]
(* = 1.5 *)
Listas são delimitadas por chaves:
Oddlist={1,3,5}
(* = {1,3,5} *)
Syntactic sugar
A linguagem pode se desviar do paradigma de M-expression quando uma alternativa mais amigável para humanos de mostrar uma expressão está disponível:
- Várias regras de formatação são usadas nesta linguagem, incluindo
TeXForm
para expressões em formato tipográfico e InputForm
para entrada de linguagem.
- Funções também podem ser aplicadas usando a expressão de prefixo
@
e a expressão de sufixo //
.
- Derivadas podem ser denotadas com um apóstrofo
'
.
- Os operadores infixos em si são considerados "açúcar sintático" para o sistema de notação de função.
Um formatador FullForm
desmembra a entrada:
FullForm[1+2]
(* = Plus[1, 2] *)
Programação funcional
O Currying é suportado
Correspondência de padrões
As funções na Linguagem Wolfram são efetivamente um caso de padrões simples para substituição:
F[x_] := x ^ 0
O :=
é um "operador SetDelayed", para que x não seja imediatamente procurado. x_
é 'syntax sugar' de Pattern[x, Blank[]]
, ou seja, "campo em branco" para qualquer valor substituir x
no restante da avaliação.
Uma iteração da classificação em bolhas é expressa como:
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]] *)
O operador /;
é "condição", para que a regra se aplique apenas quando y > z
. Os três sublinhados (___
) são uma sintaxe para BlankNullSequence[]
, representando uma sequência que pode ser nula.
O operador ReplaceRepeated //.
pode ser usado para aplicar essa regra repetidamente até que nenhuma mudança adicional ocorra:
{ 9, 5, 3, 1, 2, 4 } //. sortRule
(* = ReplaceRepeated[{ 9, 5, 3, 1, 2, 4 }, sortRule] *)
(* = {1, 2, 3, 4, 5, 9} *)
O sistema de correspondência de padrões também facilita a criação de integração e derivação baseadas em regras. Os trechos a seguir são do pacote de regras Rubi:
(* Regra recíproca *)
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]
Implementações
A implementação oficial e de referência da Wolfram Language está presente no Mathematica e nos serviços online associados. Esses são de código fechado. No entanto, a Wolfram Research lançou um analisador em C++ da linguagem sob a Licença MIT de código aberto. O livro de referência é de acesso aberto.
Ao longo dos mais de três décadas de existência da Wolfram Language, várias implementações de terceiros de código aberto também foram desenvolvidas. O MockMMA de Richard Fateman, de 1991, é digno de nota na história, tanto por ser a reimplementação mais antiga quanto por ter recebido uma notificação 'cessar e desistir' da Wolfram. Implementações modernas que ainda estão em manutenção até abril de 2020 incluem Symja em Java, expreduce em Golang e o Mathics baseado no SymPy. Essas implementações concentram-se na linguagem principal e no sistema de álgebra computacional que ela implica, não nas características online do "banco de conhecimento" da Wolfram.
Em 2019, a Wolfram Research lançou o Wolfram Engine como freeware, destinado a ser usado como uma biblioteca de programação em software não comercial.
Referências
Ligações externas