Wolfram (linguagem de programação)

linguagem de programação

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.

Wolfram Language
Paradigma Multiparadigma: sistema de redução, funcional, procedural, multidimensional
Última versão Janeiro de 2024
Criado por Stephen Wolfram / Wolfram Research
Estilo de tipagem Dinâmico, forte
Página oficial https://www.wolfram.com/language/

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 editar

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 editar

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 editar

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 editar

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 editar

O Currying é suportado

Correspondência de padrões editar

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 editar

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

  1. «Wolfram Open Code, Open Source, Open Data, Open Resources». www.wolfram.com (em inglês). Consultado em 3 de fevereiro de 2023 
  2. «Notes for Programming Language Experts about Wolfram Language». Wolfram.com. Consultado em 5 de novembro de 2015 
  3. a b What Should We Call the Language of Mathematica?
  4. Wolfram (1988).
  5. Hayes, Brian (1 de janeiro de 1990). «Thoughts on Mathematica» (PDF). Pixel 
  6. «Wolfram Language & System Documentation Center». Reference.wolfram.com. Consultado em 5 de novembro de 2015 
  7. «Putting the Wolfram Language (and Mathematica) on Every Raspberry Pi—Wolfram Blog». Blog.wolfram.com. Consultado em 5 de novembro de 2015 
  8. Sherr, Ian (22 de novembro de 2013). «Premium Mathematica software free on budget Raspberry Pi - CNET». News.cnet.com. Consultado em 5 de novembro de 2015 
  9. «The Wolfram Language will soon be integrated into Unity». Gamasutra. 10 de março de 2014. Consultado em 5 de novembro de 2015 
  10. «Is there a way to use Wolfram Language in Unity3D?». Wolfram. 2017. Consultado em 11 April 2017. Arquivado do original em 19 July 2017  Verifique data em: |acessodata=, |arquivodata= (ajuda)

Ligações externas editar