Logtalk es un lenguaje de programación lógica orientado a objetos que extiende y aprovecha el lenguaje Prolog con un conjunto de características adecuadas para la programación en grandes . [1] Proporciona soporte para encapsulación y ocultamiento de datos , separación de preocupaciones y reutilización de código mejorada . [1] Logtalk utiliza la sintaxis estándar de Prolog con la adición de algunos operadores y directivas.
La implementación del lenguaje Logtalk se distribuye bajo una licencia de código abierto y puede ejecutarse utilizando una implementación de Prolog (compatible con los estándares oficiales y de facto) [1] como compilador back-end .
Logtalk tiene como objetivo reunir las ventajas de la programación orientada a objetos y la programación lógica. [1] La orientación a objetos enfatiza el desarrollo de unidades de software discretas y reutilizables, mientras que la programación lógica enfatiza la representación del conocimiento de cada objeto de manera declarativa.
Como lenguaje de programación orientado a objetos, las principales características de Logtalk incluyen soporte para clases (con metaclases opcionales ) y prototipos , objetos paramétricos, [2] protocolos ( interfaces ), categorías (componentes, aspectos , hot patching ), herencia múltiple , herencia pública/protegida/privada, programación basada en eventos , programación multihilo de alto nivel, [3] reflexión y generación automática de documentación.
Para los programadores de Prolog, Logtalk ofrece una amplia portabilidad, con espacios de nombres de predicados (que admiten objetos estáticos y dinámicos), predicados de objetos públicos/protegidos/privados, predicados coinductivos , separación entre interfaz e implementación, semántica de metapredicados simple e intuitiva, expresiones lambda , gramáticas de cláusulas definidas , mecanismo de expansión de términos y compilación condicional. También proporciona un sistema de módulos basado en la funcionalidad de módulo central estándar de facto (internamente, los módulos se compilan como prototipos).
La sintaxis de Logtalk se basa en Prolog:
?- write ( 'Hola mundo' ), nl . Hola mundo true .
Definir un objeto:
:- objeto (mi_primer_objeto). :- inicialización (( write ( 'Hola mundo' ), nl )). :- público (p1 / 0 ). p1 :- write ( 'Este es un predicado público' ), nl . :- privado (p2 / 0 ). p2 :- write ( 'Este es un predicado privado' ), nl .:- fin_del_objeto .
Usando el objeto, suponiendo que se guarda en un archivo my_first_object.lgt:
?- logtalk_load (mi_primer_objeto). Hola mundo true .?- my_first_object :: p1. Este es un predicado público verdadero .
Al intentar acceder al predicado privado se obtiene un error:
?- mi_primer_objeto :: p2. ERROR : error( error_permiso (acceso, predicado_privado, p2), mi_primer_objeto :: p2, usuario)
Logtalk utiliza la siguiente sintaxis para predicados anónimos (expresiones lambda):
{ FreeVar1 , FreeVar2 , ... } / [ LambdaParameter1 , LambdaParameter2 , ...] >> Objetivo
Un ejemplo simple sin variables libres y utilizando un predicado de mapeo de lista es:
| ?- meta :: map([ X , Y ] >> ( Y es 2 * X ), [ 1 , 2 , 3 ], Ys ). Ys = [ 2 , 4 , 6 ]Sí
También se admite el currículo. El ejemplo anterior se puede escribir de la siguiente manera:
| ?- meta :: map([ X ] >> ([ Y ] >> ( Y es 2 * X )), [ 1 , 2 , 3 ], Ys ). Ys = [ 2 , 4 , 6 ]Sí
Los compiladores Prolog back-end compatibles incluyen B-Prolog , Ciao Prolog , CxProlog, ECLiPSe , GNU Prolog , JIProlog, Quintus Prolog , Scryer Prolog, SICStus Prolog , SWI-Prolog , Tau Prolog, Trealla Prolog, XSB y YAP . [4] Logtalk permite el uso de bibliotecas de compiladores Prolog back-end desde dentro de objetos y categorías.
Logtalk cuenta con ayuda en línea, una herramienta de documentación (que puede generar archivos PDF y HTML), una herramienta generadora de diagramas de entidades, un depurador integrado (basado en una versión extendida del modelo tradicional Procedure Box que se encuentra en la mayoría de los compiladores Prolog), un marco de prueba unitaria con análisis de cobertura de código y también es compatible con perfiladores back-end Prolog y trazadores gráficos seleccionados. [5]
Logtalk se ha utilizado para procesar modelos de datos STEP utilizados para intercambiar información sobre la fabricación de productos . [6] También se ha utilizado para implementar un sistema de razonamiento que permite el razonamiento de preferencias y la resolución de restricciones . [7]