Логток
Парадигма | Логическое программирование , объектно-ориентированное программирование , программирование на основе прототипов. |
---|---|
Разработано | Пауло Моура |
Впервые появился | 1998 год |
Стабильная версия | 3.66.0
/ 30 мая 2023 г |
ТЫ | Кросс-платформенный |
Лицензия | Художественная лицензия 2.0 (2.x) / Лицензия Apache 2.0 (3.01.x) |
Веб-сайт | журнальный разговор |
Под влиянием | |
Пролог , Smalltalk , Objective-C |
Logtalk — это объектно-ориентированный логический язык программирования, который расширяет и использует язык Пролог с набором функций, подходящим для программирования в больших средах . [1] Он обеспечивает поддержку инкапсуляции и сокрытия данных , разделения задач и расширенного повторного использования кода . [1] Logtalk использует стандартный синтаксис Пролога с добавлением нескольких операторов и директив.
Реализация языка Logtalk распространяется под лицензией с открытым исходным кодом и может работать с использованием реализации Prolog (соответствующей официальным и фактическим стандартам). [1] в качестве внутреннего компилятора.
Функции
[ редактировать ]Цель Logtalk — объединить преимущества объектно-ориентированного и логического программирования. [1] Объектная ориентация делает упор на разработку дискретных, повторно используемых единиц программного обеспечения, тогда как логическое программирование делает упор на представление знаний о каждом объекте декларативным способом.
Как объектно-ориентированный язык программирования, основные функции Logtalk включают поддержку как классов (с дополнительными метаклассами ), так и прототипов , параметрических объектов, [2] протоколы ( интерфейсы ), категории (компоненты, аспекты , горячее исправление ), множественное наследование , общедоступное/защищенное/частное наследование, событийно-ориентированное программирование , многопоточное программирование высокого уровня, [3] отражение и автоматическое создание документации.
Для программистов Пролога Logtalk обеспечивает широкую переносимость, включая пространства имен предикатов (поддерживающие как статические, так и динамические объекты), предикаты общедоступных/защищенных/частных объектов, коиндуктивные предикаты , разделение между интерфейсом и реализацией, простую и интуитивно понятную семантику метапредикатов, лямбда-выражения , определенные грамматики предложений , механизм расширения терминов и условная компиляция. Он также предоставляет систему модулей, основанную на стандартной функциональности базового модуля де-факто (внутри модули компилируются как прототипы).
Примеры
[ редактировать ]Синтаксис Logtalk основан на Прологе:
?- write('Hello world'), nl.
Hello world
true.
Определение объекта:
:- object(my_first_object).
:- initialization((write('Hello world'), nl)).
:- public(p1/0).
p1 :- write('This is a public predicate'), nl.
:- private(p2/0).
p2 :- write('This is a private predicate'), nl.
:- end_object.
Используя объект, предполагая, что он сохранен в файле my_first_object.lgt:
?- logtalk_load(my_first_object).
Hello world
true.
?- my_first_object::p1.
This is a public predicate
true.
Попытка доступа к частному предикату приводит к ошибке:
?- my_first_object::p2.
ERROR: error(permission_error(access, private_predicate, p2), my_first_object::p2, user)
Анонимные функции
[ редактировать ]Logtalk использует следующий синтаксис для анонимных предикатов (лямбда-выражений):
{FreeVar1, FreeVar2, ...}/[LambdaParameter1, LambdaParameter2, ...]>>Goal
Простой пример без свободных переменных и с использованием предиката сопоставления списка:
| ?- meta::map([X,Y]>>(Y is 2*X), [1,2,3], Ys).
Ys = [2,4,6]
yes
Также поддерживается каррирование. Приведенный выше пример можно записать так:
| ?- meta::map([X]>>([Y]>>(Y is 2*X)), [1,2,3], Ys).
Ys = [2,4,6]
yes
Совместимость с серверной частью Пролога
[ редактировать ]Поддерживаемые внутренние компиляторы Пролога включают 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), инструмент генератора диаграмм сущностей, встроенный отладчик (основанный на расширенной версии традиционной модели «Процедурный блок», присутствующей в большинстве компиляторов Пролога), среда модульного тестирования с анализом покрытия кода, а также совместима с некоторыми внутренними профилировщиками и графическими трассировщиками Prolog. [5]
Приложения
[ редактировать ]Logtalk использовался для обработки STEP моделей данных , используемых для обмена информацией о производстве продукции . [6] Он также использовался для реализации системы рассуждений, которая позволяет рассуждать о предпочтениях и решать ограничения . [7]
См. также
[ редактировать ]- Меркурий (язык программирования)
- Оз (язык программирования)
- Пролог++
- Визуальный Пролог
- Сравнение реализаций Пролога
- Синтаксис и семантика Пролога
Ссылки
[ редактировать ]- ^ Jump up to: а б с д Пауло Моура (2003). Logtalk: Разработка объектно-ориентированного языка программирования. Докторская диссертация. Университет внутренних дел Бейры
- ^ Моура, Пауло (2011). Шаблоны программирования для параметрических объектов Logtalk . Приложения декларативного программирования и управления знаниями. Конспекты лекций по информатике. Том. 6547. дои : 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 .
- ^ «Совместимость с Logtalk» . Logtalk.org. 10.10.2016 . Проверено 6 июля 2021 г.
- ^ «Инструменты разработчика — LogtalkDotOrg/logtalk3 Wiki — GitHub» . Гитхаб.com. 12 февраля 2013 г. Проверено 19 августа 2013 г.
- ^ Логическое программирование . Конспекты лекций по информатике. Том. 4079. 2006. doi : 10.1007/11799573 . ISBN 978-3-540-36635-5 .
- ^ Виктор Ноэль; Антонис Какас (2009). Горгий-C: Расширение аргументации с помощью решения ограничений (PDF) . Логическое программирование и немонотонное рассуждение. Конспекты лекций по информатике . Том. 5753. стр. 535–541.
Внешние ссылки
[ редактировать ]- Официальный сайт
- Блог Logtalking
- От простого Пролога к объектам Logtalk: эффективная инкапсуляция и повторное использование кода (приглашенный доклад). Пауло Моура. Материалы 25-й Международной конференции по логическому программированию (ICLP), июль 2009. LNCS 5649. Springer-Verlag Berlin Heidelberg». ( Слайды )