Определение типа пролога в swi-прологе - PullRequest
5 голосов
/ 18 октября 2010

в визуальном прологе в прологе есть раздел «домены», в котором вы можете определять типы. Есть ли что-то подобное в swi-прологе?

В визуальном прологе тип определяется как:

domains
NewType = thing1; thing2

Ответы [ 3 ]

7 голосов
/ 07 декабря 2010

Хотя SWI-Prolog не поддерживает типы в объеме, аналогичном тому, что вы запрашиваете, стоит отметить, что он действительно поддерживает простой механизм «типа» посредством использования спецификации термина через запись / 1 предикат в библиотеке record.

Этот предикат позволяет вам указать достаточно сложный термин «тип» (шаблон), используя конкретный язык спецификации терминов, и интерпретировать его для автоматической генерации предикатов, используемых для создания (с помощью предиката конструктора), модификации с помощью 'предикаты setter и средства доступа через предикаты getter для экземпляров терминов, все путем расширения терминов с определенным соглашением об именах предикатов.

Это особенно полезно при написании кода Prolog, который обходит достаточно сложные структуры терминов,поскольку он предоставляет вам элементарную возможность проверки типов, которой обычно не хватает в Прологе (изначально).Я использовал это во многих крупномасштабных проектах Prolog, где интерфейсы разрабатываются до реализации.

6 голосов
/ 22 октября 2010

Нет.Но в Mercury есть объявление режима.Меркурий - это больше, чем Пролог;это функционально-логический язык.У Меркурия все еще много синтаксиса Пролога.

SWI-Пролог - это стандартный Пролог.Он использует только объявления режимов в документации 1 в качестве информации для пользователей.Такие объявления могут быть помещены в комментарии модулей для программ синтаксического анализа документации для компиляции.

В стандартных Прологах, вне комментариев, такие объявления допускаются (и требуются) только в очень особых ситуациях.Например, предикат Sicstus Prolog block / 1 требует их.

Блок / 1 используется для совместной маршрутизации (отложенная оценка, задержка и т. Д.).Я видел только block, используемый в одной программе в моей жизни, PAKCS 2 , интерпретатор для другого функционально-логического языка.Когда интерпретатор был портирован на SWI, block/1 не использовался.

1 Тип и режим объявления в исходной документации SWI
2 PAKCS, программа, использующая предикат block/1 (PAKCS - это реализация языка curry .)

1 голос
/ 06 июня 2012

Я вспомнил, что читал про типы для пролога Swi & Yap.Вот сайт с «Проверкой типов Хиндли-Милнера для Пролога»:

Типы для Пролога - объявления типов в стиле Меркурия и подписи предикатов

Тип ПрологБиблиотека проверки

...