Logtalk es un lenguaje de programación lógica orientado a objetos que amplía y aprovecha el lenguaje Prolog con un conjunto de características adecuadas para la programación en grande . [1] Proporciona soporte para encapsulación y ocultación de datos , separación de preocupaciones y reutilización mejorada de código . [1] Logtalk utiliza la sintaxis estándar de Prolog con la adición de algunos operadores y directivas.
Paradigma | Programación lógica , programación orientada a objetos , programación basada en prototipos |
---|---|
Diseñada por | Paulo Moura |
Apareció por primera vez | 1998 |
Lanzamiento estable | 3.33.0 / 3 de diciembre de 2019 |
SO | Multiplataforma |
Licencia | Licencia artística 2.0 (2.x) / Licencia Apache 2.0 (3.01.x) |
Sitio web | logtalk |
Influenciado por | |
Prólogo , Smalltalk , Objective-C |
La implementación del lenguaje Logtalk se distribuye bajo una licencia de código abierto y puede ejecutarse usando una implementación Prolog (compatible con los estándares oficiales y de facto) [1] como compilador de back-end .
Características
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 características principales de Logtalk incluyen soporte para ambas clases (con metaclases opcionales ) y prototipos , objetos paramétricos, [2] protocolos ( interfaces ), categorías (componentes, aspectos , parches en caliente ), herencia múltiple , público / herencia protegida / privada, programación dirigida por eventos , programación de subprocesos múltiples de alto nivel, [3] reflexión y generación automática de documentación.
Para los programadores de Prolog, Logtalk proporciona una amplia portabilidad, con espacios de nombres de predicados (que admiten tanto objetos estáticos como 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 , definidas gramáticas de cláusulas , mecanismo de expansión de términos y compilación condicional. También proporciona un sistema de módulos basado en la funcionalidad del módulo central estándar de facto (internamente, los módulos se compilan como prototipos).
Ejemplos de
La sintaxis de Logtalk se basa en Prolog:
? - escribir ( 'Hola mundo' ), nl .Hola mundo cierto .
Definiendo 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 .: - objeto_final .
Usando el objeto, asumiendo que está guardado en un archivo my_first_object.lgt:
? - logtalk_load (mi_primer_objeto).Hola mundo cierto .? - mi_primer_objeto :: p1.Este es un predicado público verdadero .
Intentar acceder al predicado privado da un error:
? - mi_primer_objeto :: p2.ERROR : error ( permission_error (acceso, private_predicate, p2), my_first_object :: p2, usuario)
Funciones anónimas
Logtalk usa la siguiente sintaxis para predicados anónimos (expresiones lambda):
{ FreeVar1 , FreeVar2 , ... } / [ LambdaParameter1 , LambdaParameter2 , ...] >> Objetivo
Un ejemplo simple sin variables libres y usando un predicado de mapeo de lista es:
| ? - meta :: mapa ([ X , Y ] >> ( Y es 2 * X ), [ 1 , 2 , 3 ], Ys ).Ys = [ 2 , 4 , 6 ]sí
También se admite el curry. El ejemplo anterior se puede escribir como:
| ? - meta :: mapa ([ X ] >> ([ Y ] >> ( Y es 2 * X )), [ 1 , 2 , 3 ], Ys ).Ys = [ 2 , 4 , 6 ]sí
Compatibilidad con el back-end de Prolog
A partir de octubre de 2016, los compiladores back-end de Prolog compatibles incluyen B-Prolog , CxProlog , ECLiPSe , GNU Prolog , JIProlog , Lean Prolog , Qu-Prolog , Quintus Prolog , SICStus Prolog , SWI-Prolog , XSB y YAP . [4] Logtalk permite el uso de bibliotecas del compilador Prolog de back-end desde dentro de objetos y categorías.
Herramientas de desarrollo
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 entidad, un depurador integrado (basado en una versión extendida del modelo de caja de procedimiento tradicional que se encuentra en la mayoría de los compiladores de Prolog), un marco de prueba unitario con análisis de cobertura de código, y también es compatible con trazadores gráficos y perfiladores Prolog de back-end seleccionados. [5]
Aplicaciones
Logtalk se ha utilizado para procesar modelos de datos STEP utilizados 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]
Ver también
- Mercury (lenguaje de programación)
- Oz (lenguaje de programación)
- Prólogo ++
- Prólogo visual
Referencias
- ↑ a b c d Paulo Moura (2003). Logtalk: Diseño de un lenguaje de programación lógico orientado a objetos. Tesis doctoral. Interior de la Universidade da Beira
- ^ 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. Apuntes de conferencias en Ciencias de la Computación. 6547 . doi : 10.1007 / 978-3-642-20589-7_4 . ISBN 978-3-642-20588-0.
- ^ "Aspectos prácticos de los lenguajes declarativos". Apuntes de conferencias en Ciencias de la Computación. 4902 . 2008. doi : 10.1007 / 978-3-540-77442-6 . ISBN 978-3-540-77441-9. Cite journal requiere
|journal=
( ayuda ) - ^ "Compatibilidad con Logtalk" . Logtalk.org. 2016-10-10 . Consultado el 4 de enero de 2018 .
- ^ / (12 de febrero de 2013). "Herramientas de desarrollo - LogtalkDotOrg / logtalk3 Wiki - GitHub" . Github.com . Consultado el 19 de agosto de 2013 .CS1 maint: nombres numéricos: lista de autores ( enlace )
- ^ "Programación lógica". Apuntes de conferencias en Ciencias de la Computación. 4079 . 2006. doi : 10.1007 / 11799573 . ISBN 978-3-540-36635-5. Cite journal requiere
|journal=
( ayuda ) - ^ 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 monotónico. Apuntes de conferencias en informática . 5753 . págs. 535–541.
enlaces externos
- Página web oficial
- Blog de Logtalking
- De un prólogo simple a objetos Logtalk: encapsulación y reutilización de código eficaz (charla 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 )