Определение типа пролога в swi-прологе
В визуальном прологе в программе пролога есть раздел "домены", в котором вы можете определять типы. Есть ли что-то подобное в swi-прологе?
В визуальном прологе тип определяется как:
domains
NewType = thing1; thing2
3 ответа
Нет. Но в Меркурии есть объявление режима. Меркурий - это больше, чем Пролог; это функционально-логический язык. У Меркурия все еще много синтаксиса Пролога.
SWI-Пролог - это стандартный Пролог. Он использует только объявления режимов в документации 1 в качестве информации для пользователей. Такие объявления могут быть помещены в комментарии модулей для программ анализа документации для компиляции.
В стандартных Прологах, за пределами комментариев, такие объявления допускаются (и требуются) только в очень особых ситуациях. Например, для предиката Sicstus Prolog block/1 они необходимы.
Блок /1 используется для совместной маршрутизации (отложенная оценка, задержка и т. Д.). Я только видел block
использовал в одной из моих программ PAKCS 2, интерпретатор другого функционально-логического языка. Когда переводчик был перенесен в SWI, block/1
не был использован.
1 Объявления типов и режимов в исходной документации SWI
2 PAKCS, программа, использующая block/1
Предикат (PAKCS - это реализация языка карри.)
Хотя SWI-Prolog не поддерживает типы в объеме, аналогичном тому, что вы запрашиваете, стоит отметить, что он действительно поддерживает простой механизм "типа" посредством использования спецификации термина через предикат record/1 в record
библиотека.
Этот предикат позволяет вам указать достаточно сложный термин "тип" (шаблон), используя конкретный язык спецификации терминов, и интерпретирует его для автоматической генерации предикатов, используемых для создания (с помощью предиката конструктора), модификации с помощью предикатов "сеттера" и средств доступа через "getter" предикаты на экземплярах терминов, все путем расширения терминов с определенным соглашением именования предикатов.
Это особенно полезно при написании кода Prolog, который обходит разумно сложные терминологические структуры, поскольку предоставляет вам элементарную возможность проверки типов, которой обычно не хватает в Prolog (изначально). Я использовал это во многих крупномасштабных проектах Prolog, где интерфейсы разрабатываются до реализации.
Я вспомнил, что читал про типы для пролога Swi & Yap. Вот веб-сайт с "Проверкой типов Хиндли-Милнера для Пролога":
Типы для Пролога - объявления типов в стиле Mercury и сигнатуры предикатов