Gödel (lenguaje de programación)

Gödel es un lenguaje de programación declarativo, de propósito general, adherido al paradigma de la programación lógica. Es un lenguaje fuertemente tipado, con un sistema de tipos basado en many-sorted logic con polimorfismo parametrizado. Se le dio ese nombre en honor al lógico Kurt Gödel.

Características

Gödel tiene un sistema de módulos; permite enteros y racionales de precisión arbitraria y números de punto flotante. Puede resolver restricciones sobre dominios finitos de enteros así como restricciones lineales racionales. Admite procesamiento de conjuntos finitos. Tiene también una regla flexible de cómputo que admite el operador de poda, que es una generalización del operador commit de los lenguajes de programación concurrentes.

Las facilidades metalógicas de Gödel dan cabida a metaprogramas que realizan análisis, transformación, compilación, verificación y puesta a punto, entre muchas otras tareas.

Ejemplo de código

El siguiente ejemplo de módulo Gödel es una especificación del máximo común divisor (MCD) de dos números. Su objetivo es mostrar la naturaleza declarativa de Gödel, pero no es particularmente eficiente. El predicado DivisorComun dice que si i y j no son cero, d es un divisor común de i y j si está entre 1 y el menor entre i y j y divide a los dos en forma exacta. El predicado Mcd dice que d es el MCD de i y j si es un divisor común de i y j y no existe e que sea también divisor común de i y j y sea mayor que d.

MODULE      MCD.
IMPORT      Integers.
 
PREDICATE   Mcd : Integer * Integer * Integer.
Mcd(i,j,d) <- 
           DivisorComun(i,j,d) &
           ~ SOME [e] (DivisorComun(i,j,e) & e > d).
 
PREDICATE   DivisorComun : Integer * Integer * Integer.
DivisorComun(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.


Enlaces externos

Este artículo ha sido escrito por Wikipedia. El texto está disponible bajo la licencia Creative Commons - Atribución - CompartirIgual. Pueden aplicarse cláusulas adicionales a los archivos multimedia.