Gödel (linguagem de programação) - Gödel (programming language)
Paradigma | declarativo , lógico |
---|---|
Projetado por | John Lloyd e Patricia Hill |
Desenvolvedor | John Lloyd e Patricia Hill |
Apareceu pela primeira vez | 1992 |
Versão estável | 1,5 / 11 de agosto de 1995
|
Disciplina de digitação | Forte |
SO | Tipo Unix |
Licença | Pesquisa não comercial / uso educacional apenas |
Dialetos | |
Gödel com Módulos Genéricos (Parametrizados) |
Gödel é uma linguagem de programação declarativa de propósito geral que segue o paradigma de programação lógica . É uma linguagem fortemente tipada , o sistema de tipo sendo baseado em lógica de muitos classificados com polimorfismo paramétrico . Recebeu o nome do lógico Kurt Gödel .
Recursos
Gödel tem um sistema de módulos, e suporta arbitrárias precisão inteiros, racionais de precisão arbitrária, e também números de ponto flutuante. Ele pode resolver restrições sobre domínios finitos de inteiros e também restrições racionais lineares. Suporta processamento de conjuntos finitos . Ele também tem uma regra de computação flexível e um operador de poda que generaliza o commit das linguagens de programação lógicas concorrentes.
Os recursos meta-lógicos de Gödel fornecem suporte para metaprogramas que fazem análise, transformação , compilação, verificação e depuração, entre outras tarefas.
Código de amostra
O seguinte módulo de Gödel é uma especificação do máximo divisor comum (GCD) de dois números. Pretende-se demonstrar a natureza declarativa de Gödel, não para ser particularmente eficiente. O CommonDivisor
predicado diz que se i
e j
não forem zero, então d
é um divisor comum de i
e j
se está entre 1
e o menor de i
e j
e divide ambos i
e j
exatamente. O Gcd
predicado diz que d
é o máximo divisor comum de i
e j
se é um divisor comum de i
e j
, e não há nenhum e
que também seja um divisor comum de i
e j
e é maior que d
.
MODULE GCD. IMPORT Integers. PREDICATE Gcd : Integer * Integer * Integer. Gcd(i,j,d) <- CommonDivisor(i,j,d) & ~ SOME [e] (CommonDivisor(i,j,e) & e > d). PREDICATE CommonDivisor : Integer * Integer * Integer. CommonDivisor(i,j,d) <- IF (i = 0 \/ j = 0) THEN d = Max(Abs(i),Abs(j)) ELSE 1 =< d =< Min(Abs(i),Abs(j)) & i Mod d = 0 & j Mod d = 0.