×

Paradigm | declarative, logic |
---|---|

Designed by | John Lloyd & Patricia Hill |

Developer | John Lloyd & Patricia Hill |

First appeared | 1992 |

Stable release | 1.5
/ August 11, 1995 |

Typing discipline | strong |

OS | Unix-like |

License | Non-commercial research/educational use only |

Dialects | |

Gödel with Generic (Parametrised) Modules |

**Gödel** is a declarative, general-purpose programming language that adheres to the logic programming paradigm. It is a strongly typed language, the type system being based on many-sorted logic with parametric polymorphism. It is named after logician Kurt Gödel.

Gödel has a module system, and it supports arbitrary precision integers, arbitrary precision rationals, and also floating-point numbers. It can solve constraints over finite domains of integers and also linear rational constraints. It supports processing of finite sets. It also has a flexible computation rule and a pruning operator which generalises the commit of the concurrent logic programming languages.

Gödel's meta-logical facilities provide support for meta-programs that do analysis, transformation, compilation, verification, and debugging, among other tasks.

The following Gödel module is a specification of the greatest common divisor (GCD) of two numbers. It is intended to demonstrate the declarative nature of Gödel, not to be particularly efficient.
The `CommonDivisor`

predicate says that if `i`

and `j`

are not zero, then `d`

is a common divisor of `i`

and `j`

if it lies between `1`

and the smaller of `i`

and `j`

and divides both `i`

and `j`

exactly.
The `Gcd`

predicate says that `d`

is a greatest common divisor of `i`

and `j`

if it is a common divisor of `i`

and `j`

, and there is no `e`

that is also a common divisor of `i`

and `j`

and is greater than `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.

**By:** Wikipedia.org

**Edited:** 2021-06-18 18:13:11

**Source:** Wikipedia.org