Гёдель (язык программирования) - Gödel (programming language)
Парадигма | декларативный , логический |
---|---|
Разработано | Джон Ллойд и Патрисия Хилл |
Разработчик | Джон Ллойд и Патрисия Хилл |
Впервые появился | 1992 г. |
Стабильный выпуск | 1.5 / 11 августа 1995 г.
|
Печатная дисциплина | сильный |
Операционные системы | 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.