Gödel (linguagem de programação) - Gödel (programming language)

Gödel
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  ( 11/08/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.

links externos