Гёдель (язык программирования) - Gödel (programming language)

Гёдель
Парадигма декларативный , логический
Разработано Джон Ллойд и Патрисия Хилл
Разработчик Джон Ллойд и Патрисия Хилл
Впервые появился 1992 г.
Стабильный выпуск
1.5 / 11 августа 1995 г.  ( 1995-08-11 )
Печатная дисциплина сильный
Операционные системы Unix-подобный
Лицензия Только для некоммерческих исследований / образовательных целей
Диалекты
Гёдель с универсальными (параметризованными) модулями

Gödel - это декларативный язык программирования общего назначения, который придерживается парадигмы логического программирования . Это строго типизированный язык , система типов которого основана на многосортной логике с параметрическим полиморфизмом . Он назван в честь логика Курта Гёделя .

Функции

Гедель имеет модульную систему, и она поддерживает произвольные точность целые числа, число произвольных точности рациональные числа, а также число с плавающей точкой. Он может решать ограничения в конечных областях целых чисел, а также линейные рациональные ограничения. Он поддерживает обработку конечных множеств . Он также имеет гибкое правило вычислений и оператор сокращения, который обобщает фиксацию языков параллельного логического программирования.

Мета-логические возможности Gödel обеспечивают поддержку метапрограмм, которые , среди прочего , выполняют анализ, преобразование , компиляцию, проверку и отладку.

Образец кода

Следующий модуль Гёделя является спецификацией наибольшего общего делителя (НОД) двух чисел. Он призван продемонстрировать декларативный характер Гёделя, а не быть особенно эффективным. CommonDivisor Предикат говорит , что если i и j не равны нулю, то d есть общий делитель i и , j если она лежит между 1 и меньшим из i и j и делит оба i и j ровно. Gcd Предикат говорит , что d это наибольший общий делитель i и , j если он не является общим делителем i и j , и нет , e что также является общий делитель i и j и больше 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.

внешние ссылки