Articulo de referencia

Logtalk

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 adecuado para la programación en...

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 adecuado para la programación en grandes . [ 1 ] Proporciona soporte para encapsulación y ocultación de datos , separación de responsabilidades 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 (que cumple con los estándares oficiales y de facto) [ 1 ] como compilador de back-end .

Características

Logtalk pretende combinar las ventajas de la programación orientada a objetos y la programación lógica. [ 1 ] La orientación a objetos se centra en el desarrollo de unidades de software discretas y reutilizables, mientras que la programación lógica se centra en la representación del conocimiento de cada objeto de forma 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 , parcheo en caliente ), herencia múltiple , herencia pública/protegida/privada, programación orientada a 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 y 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. Además, proporciona un sistema de módulos basado en la funcionalidad estándar de facto de los módulos principales (internamente, los módulos se compilan como prototipos).

Ejemplos

La sintaxis de Logtalk se basa en Prolog:

?- escribir ( 'Hola mundo' ), nl . Hola mundo verdadero . 

Definir un objeto:

:- objeto (mi_primer_objeto).  :- inicialización (( escribir ( 'Hola mundo' ), nl )).  :- público (p1 / 0 ). p1 :- escribir ( 'Este es un predicado público' ), nl .  :- privado (p2 / 0 ). p2 :- escribir ( 'Este es un predicado privado' ), nl . :- fin_objeto . 

Utilizando el objeto, suponiendo que esté guardado en un archivo my_first_object.lgt:

?- logtalk_load (my_first_object). Hola mundo verdadero . ?- my_first_object :: p1. Este es un predicado público verdadero . 

Al intentar acceder al predicado privado se produce un error:

?- my_first_object :: p2. ERROR : error( permission_error (access, private_predicate, p2), my_first_object :: p2, user) 

Funciones anónimas

Logtalk utiliza la siguiente sintaxis para predicados anónimos (expresiones lambda):

{ FreeVar1 , FreeVar2 , ... } / [ LambdaParameter1 , LambdaParameter2 , ...] >> Objetivo

Un ejemplo sencillo 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 currying. El ejemplo anterior se puede escribir como:

| ?- meta :: map([ X ] >> ([ Y ] >> ( Y es 2 * X )), [ 1 , 2 , 3 ], Ys ). Ys = [ 2 , 4 , 6 ] Sí 

Compatibilidad con el back-end de Prolog

Los compiladores de Prolog de 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 de Prolog de back-end desde dentro de objetos y categorías.

Herramientas para desarrolladores

Logtalk incluye 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 de Prolog), un marco de pruebas unitarias con análisis de cobertura de código y también es compatible con determinados analizadores de rendimiento y rastreadores gráficos de Prolog. [ 5 ]

Aplicaciones

Logtalk se ha utilizado para procesar modelos de datos STEP empleados para intercambiar información de 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 ]

Véase también

Referencias

  1. ^ Paulo Moura (2003 ) . Logtalk: Diseño de un lenguaje de programación lógica orientado a objetos. Tesis doctoral. Universidade da Beira Interior
  2. Moura, Paulo (2011). Patrones de programación para objetos paramétricos de Logtalk . Aplicaciones de la programación declarativa y la gestión del conocimiento. Lecture Notes in Computer Science. Vol.  6547. doi : 10.1007/978-3-642-20589-7_4 . ISBN 978-3-642-20588-0.
  3. Aspectos prácticos de los lenguajes declarativos . Lecture Notes in Computer Science. Vol. 4902. 2008. doi : 10.1007/978-3-540-77442-6 . ISBN  978-3-540-77441-9.
  4. "Compatibilidad con Logtalk" . Logtalk.org. 10 de octubre de 2016. Consultado el 6 de julio de 2021 .
  5. "Herramientas para desarrolladores – LogtalkDotOrg/logtalk3 Wiki – GitHub" . Github.com. 12 de febrero de 2013. Consultado el 19 de agosto de 2013 .
  6. Programación lógica . Notas de clase en ciencias de la computación. Vol. 4079. 2006. doi : 10.1007/11799573 . ISBN  978-3-540-36635-5.
  7. Victor Noël; Antonis Kakas (2009). Gorgias-C: Ampliación de la argumentación con resolución de restricciones (PDF) . Programación lógica y razonamiento no monótono. Lecture Notes in Computer Science . Vol. 5753. pp. 535–541 .  
  • Sitio web oficial
  • Blog de Logtalking
  • De Prolog simple a objetos Logtalk: encapsulación y reutilización de código eficaces (Ponencia invitada). Paulo Moura. Actas de la 25.ª Conferencia Internacional sobre Programación Lógica (ICLP), julio de 2009. LNCS 5649. Springer-Verlag Berlin Heidelberg. ( Diapositivas )