Logtalk — это объектно-ориентированный язык логического программирования , который расширяет и использует язык Prolog с набором функций, подходящим для программирования в больших системах . [1] Он обеспечивает поддержку инкапсуляции и сокрытия данных , разделения задач и улучшенного повторного использования кода . [1] Logtalk использует стандартный синтаксис Prolog с добавлением нескольких операторов и директив.
Реализация языка Logtalk распространяется по лицензии с открытым исходным кодом и может работать с использованием реализации Prolog (соответствующей официальным и фактическим стандартам) [1] в качестве внутреннего компилятора.
Logtalk стремится объединить преимущества объектно-ориентированного программирования и логического программирования. [1] Объектно-ориентированное программирования делает акцент на разработке дискретных, повторно используемых единиц программного обеспечения, в то время как логическое программирование делает акцент на представлении знаний каждого объекта декларативным способом.
Как объектно-ориентированный язык программирования, Logtalk имеет следующие основные функции: поддержка классов ( с дополнительными метаклассами ) и прототипов , параметрических объектов, [2] протоколов ( интерфейсов ), категорий (компонентов, аспектов , горячих исправлений ), множественного наследования , открытого/защищенного/частного наследования, событийно-управляемого программирования , высокоуровневого многопоточного программирования, [3] рефлексии и автоматической генерации документации.
Для программистов Prolog Logtalk обеспечивает широкую переносимость, включая пространства имен предикатов (поддерживающие как статические, так и динамические объекты), публичные/защищенные/приватные предикаты объектов, коиндуктивные предикаты , разделение интерфейса и реализации, простую и интуитивно понятную семантику метапредикатов, лямбда-выражения , грамматики определенных предложений , механизм расширения терминов и условную компиляцию. Он также предоставляет модульную систему, основанную на фактической стандартной функциональности основных модулей (внутренне модули компилируются как прототипы).
Синтаксис Logtalk основан на Prolog:
?- write ( 'Привет, мир' ), nl . Привет, мир правда .
Определение объекта:
:- объект (мой_первый_объект). :- инициализация (( write ( 'Hello world' ), nl )). :- публичный (p1 / 0 ). p1 :- write ( 'Это публичный предикат' ), nl . :- частный (p2 / 0 ). p2 :- write ( 'Это частный предикат' ), nl .:- конец_объекта .
Используя объект, предположим, что он сохранен в файле my_first_object.lgt:
?- logtalk_load (my_first_object). Привет, мир, правда .?- my_first_object :: p1. Это публичный предикат true .
Попытка доступа к частному предикату приводит к ошибке:
?- my_first_object :: p2. ОШИБКА : error( permission_error (access, private_predicate, p2), my_first_object :: p2, user)
Logtalk использует следующий синтаксис для анонимных предикатов (лямбда-выражений):
{ FreeVar1 , FreeVar2 , ... } / [ ЛямбдаПараметр1 , ЛямбдаПараметр2 , ...] >> Цель
Простой пример без свободных переменных и с использованием предиката отображения списка:
| ?- мета :: map([ X , Y ] >> ( Y is 2 * X ), [ 1 , 2 , 3 ], Ys ). Ys = [ 2 , 4 , 6 ]да
Каррирование также поддерживается. Приведенный выше пример можно записать так:
| ?- мета :: map([ X ] >> ([ Y ] >> ( Y is 2 * X )), [ 1 , 2 , 3 ], Ys ). Ys = [ 2 , 4 , 6 ]да
Поддерживаемые внутренние компиляторы Prolog включают B-Prolog , Ciao Prolog , CxProlog, ECLiPSe , GNU Prolog , JIProlog, Quintus Prolog , Scryer Prolog, SICStus Prolog , SWI-Prolog , Tau Prolog, Trealla Prolog, XSB и YAP . [4] Logtalk позволяет использовать библиотеки внутренних компиляторов Prolog из объектов и категорий.
Logtalk включает в себя онлайн-справку, инструмент документирования (который может генерировать файлы PDF и HTML), инструмент генератора диаграмм сущностей, встроенный отладчик (основанный на расширенной версии традиционной модели Procedure Box, присутствующей в большинстве компиляторов Prolog), фреймворк модульного тестирования с анализом покрытия кода, а также совместим с выбранными внутренними профилировщиками Prolog и графическими трассировщиками. [5]
Logtalk использовался для обработки моделей данных STEP , используемых для обмена информацией о производстве продукции . [6] Он также использовался для внедрения системы рассуждений, которая позволяет делать рассуждения о предпочтениях и решать проблемы ограничений . [7]