Парадигма | Логическое программирование , объектно-ориентированное программирование , программирование на основе прототипов |
---|---|
Разработано | Пауло Моура |
Впервые появился | 1998 |
Стабильный выпуск | 3.48.0 / 6 июля 2021 г . |
Операционные системы | Кроссплатформенность |
Лицензия | Художественная лицензия 2.0 (2.x) / Apache License 2.0 (3.01.x) |
Веб-сайт | logtalk |
Под влиянием | |
Пролог , Smalltalk , Objective-C |
Logtalk - это объектно-ориентированный язык логического программирования, который расширяет и использует язык Prolog с набором функций, подходящим для программирования в целом . [1] Он обеспечивает поддержку инкапсуляции и сокрытия данных , разделения проблем и расширенного повторного использования кода . [1] Logtalk использует стандартный синтаксис Пролога с добавлением нескольких операторов и директив.
Реализация языка Logtalk распространяется под лицензией с открытым исходным кодом и может работать с использованием реализации Prolog (совместимой с официальными и фактическими стандартами) [1] в качестве внутреннего компилятора.
Функции
Logtalk стремится объединить преимущества объектно-ориентированного программирования и логического программирования. [1] Объектная ориентация делает упор на разработку дискретных, многократно используемых единиц программного обеспечения, в то время как логическое программирование делает упор на декларативное представление знаний о каждом объекте.
Как объектно-ориентированный язык программирования, основные функции Logtalk включают поддержку как классов (с дополнительными метаклассами ), так и прототипов , параметрических объектов, [2] протоколов ( интерфейсов ), категорий (компоненты, аспекты , горячее исправление ), множественного наследования , общедоступных / защищенное / частное наследование, программирование , управляемое событиями , высокоуровневое многопоточное программирование, [3] отражение и автоматическое создание документации.
Для программистов на Prolog Logtalk обеспечивает широкую переносимость, включая пространства имен предикатов (поддерживающие как статические, так и динамические объекты), предикаты общедоступных / защищенных / частных объектов, коиндуктивные предикаты , разделение между интерфейсом и реализацией, простую и интуитивно понятную семантику метапредикатов, лямбда-выражения , определенные грамматики предложений , механизм расширения терминов и условная компиляция. Он также предоставляет модульную систему, основанную на де-факто стандартной функциональности основного модуля (внутри модули компилируются как прототипы).
Примеры
Синтаксис Logtalk основан на Прологе:
? - написать ( 'Hello world' ), nl .Привет, мир, правда .
Определение объекта:
: - объект (my_first_object). : - инициализация (( 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.Это является публичным предикатом верно .
Попытка получить доступ к частному предикату дает ошибку:
? - my_first_object :: p2.ОШИБКА : ошибка ( permission_error (доступ, private_predicate, p2), my_first_object :: p2, пользователь)
Анонимные функции
Logtalk использует следующий синтаксис для анонимных предикатов (лямбда-выражений):
{ FreeVar1 , FreeVar2 , ... } / [ LambdaParameter1 , LambdaParameter2 , ...] >> Цель
Простой пример без свободных переменных и с использованием предиката отображения списка:
| ? - meta :: map ([ X , Y ] >> ( Y равно 2 * X ), [ 1 , 2 , 3 ], Ys ).Ys = [ 2 , 4 , 6 ]
да
Также поддерживается каррирование. Приведенный выше пример можно записать как:
| ? - meta :: map ([ X ] >> ([ Y ] >> ( Y равно 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 позволяет использовать внутренние библиотеки компилятора Пролога из объектов и категорий.
Инструменты разработчика
Logtalk включает в себя онлайн-справку, инструмент для документирования (который может генерировать файлы PDF и HTML), инструмент для создания диаграмм сущностей, встроенный отладчик (на основе расширенной версии традиционной модели Procedure Box, присутствующей в большинстве компиляторов Prolog), фреймворк для модульного тестирования с анализом покрытия кода, а также совместим с выбранными внутренними профилировщиками Prolog и графическими трассировщиками. [5]
Приложения
Logtalk использовался для обработки моделей данных STEP, используемых для обмена информацией о производстве продукции . [6] Он также использовался для реализации системы рассуждений, которая позволяет обосновывать предпочтения и решать ограничения . [7]
Смотрите также
- Меркурий (язык программирования)
- Оз (язык программирования)
- Пролог ++
- Визуальный пролог
использованная литература
- ^ а б в г Пауло Моура (2003). Logtalk: Дизайн объектно-ориентированного логического языка программирования. Кандидатская диссертация. Universidade da Beira Interior
- Перейти ↑ Moura, Paulo (2011). Шаблоны программирования для параметрических объектов Logtalk . Приложения декларативного программирования и управления знаниями. Конспект лекций по информатике. 6547 . DOI : 10.1007 / 978-3-642-20589-7_4 . ISBN 978-3-642-20588-0.
- ^ «Практические аспекты декларативных языков». Конспект лекций по информатике. 4902 . 2008. DOI : 10.1007 / 978-3-540-77442-6 . ISBN 978-3-540-77441-9. Цитировать журнал требует
|journal=
( помощь ) - ^ "Совместимость с Logtalk" . Logtalk.org. 2016-10-10 . Проверено 6 июля 2021 .
- ^ / (12 февраля 2013 г.). «Инструменты разработчика - LogtalkDotOrg / logtalk3 Wiki - GitHub» . Github.com . Проверено 19 августа 2013 .CS1 maint: числовые имена: список авторов ( ссылка )
- ^ «Логическое программирование». Конспект лекций по информатике. 4079 . 2006. DOI : 10.1007 / 11799573 . ISBN 978-3-540-36635-5. Цитировать журнал требует
|journal=
( помощь ) - ↑ Виктор Ноэль; Антонис Какас (2009). Gorgias-C: Расширение аргументации с помощью решения ограничений (PDF) . Логическое программирование и немонотонные рассуждения. Конспект лекций по информатике . 5753 . С. 535–541.
внешние ссылки
- Официальный веб-сайт
- Logtalking блог
- От простого пролога к объектам Logtalk: эффективная инкапсуляция и повторное использование кода (приглашенный доклад). Пауло Моура. Труды 25-й Международной конференции по логическому программированию (ICLP), июль 2009 г. LNCS 5649. Springer-Verlag Berlin Heidelberg ». ( Слайды )
- Языки объектно-ориентированного программирования
- Языки логического программирования
- Семейство языков программирования Prolog