Paradigm | Logic programming, object-oriented programming, prototype-based programming |
---|---|
Designed by | Paulo Moura |
First appeared | 1998; 26 years ago (1998) |
Stable release | 3.66.0 / 30 May 2023; 18 months ago (2023-05-30) |
OS | Cross-platform |
License | Artistic License 2.0 (2.x) / Apache License 2.0 (3.01.x) |
Website | logtalk |
Influenced by | |
Prolog, Smalltalk, Objective-C |
Logtalk is an object-oriented logic programming language that extends and leverages the Prolog language with a feature set suitable for programming in the large. It provides support for encapsulation and data hiding, separation of concerns and enhanced code reuse. Logtalk uses standard Prolog syntax with the addition of a few operators and directives.
The Logtalk language implementation is distributed under an open source license and can run using a Prolog implementation (compliant with official and de facto standards) as the back-end compiler.
Features
Logtalk aims to bring together the advantages of object-oriented programming and logic programming. Object-orientation emphasizes developing discrete, reusable units of software, while logic programming emphasizes representing the knowledge of each object in a declarative way.
As an object-oriented programming language, Logtalk's major features include support for both classes (with optional metaclasses) and prototypes, parametric objects, protocols (interfaces), categories (components, aspects, hot patching), multiple inheritance, public/protected/private inheritance, event-driven programming, high-level multi-threading programming, reflection, and automatic generation of documentation.
For Prolog programmers, Logtalk provides wide portability, featuring predicate namespaces (supporting both static and dynamic objects), public/protected/private object predicates, coinductive predicates, separation between interface and implementation, simple and intuitive meta-predicate semantics, lambda expressions, definite clause grammars, term-expansion mechanism, and conditional compilation. It also provides a module system based on de facto standard core module functionality (internally, modules are compiled as prototypes).
Examples
Logtalk's syntax is based on Prolog:
?- write('Hello world'), nl. Hello world true.
Defining an object:
:- 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.
Using the object, assuming is saved in a my_first_object.lgt file:
?- logtalk_load(my_first_object). Hello world true. ?- my_first_object::p1. This is a public predicate true.
Trying to access the private predicate gives an error:
?- my_first_object::p2. ERROR: error(permission_error(access, private_predicate, p2), my_first_object::p2, user)
Anonymous functions
This section is an excerpt from Examples of anonymous functions § Logtalk.Logtalk uses the following syntax for anonymous predicates (lambda expressions):
{FreeVar1, FreeVar2, ...}/>>Goal
A simple example with no free variables and using a list mapping predicate is:
| ?- meta::map(>>(Y is 2*X), , Ys). Ys = yes
Currying is also supported. The above example can be written as:
| ?- meta::map(>>(>>(Y is 2*X)), , Ys). Ys = yes
Prolog back-end compatibility
Supported back-end Prolog compilers include B-Prolog, Ciao Prolog, CxProlog, ECLiPSe, GNU Prolog, JIProlog, Quintus Prolog, Scryer Prolog, SICStus Prolog, SWI-Prolog, Tau Prolog, Trealla Prolog, XSB, and YAP. Logtalk allows use of back-end Prolog compiler libraries from within object and categories.
Developer tools
Logtalk features on-line help, a documenting tool (that can generate PDF and HTML files), an entity diagram generator tool, a built-in debugger (based on an extended version of the traditional Procedure Box model found on most Prolog compilers), a unit test framework with code coverage analysis, and is also compatible with selected back-end Prolog profilers and graphical tracers.
Applications
Logtalk has been used to process STEP data models used to exchange product manufacturing information. It has also been used to implement a reasoning system that allows preference reasoning and constraint solving.
See also
- Mercury (programming language)
- Oz (programming language)
- Prolog++
- Visual Prolog
- Comparison of Prolog implementations
- Prolog syntax and semantics
References
- ^ Paulo Moura (2003). Logtalk: Design of an Object-Oriented Logic Programming Language. PhD thesis. Universidade da Beira Interior
- Moura, Paulo (2011). Programming Patterns for Logtalk Parametric Objects. Applications of Declarative Programming and Knowledge Management. Lecture Notes in Computer Science. Vol. 6547. doi:10.1007/978-3-642-20589-7_4. ISBN 978-3-642-20588-0.
- Practical Aspects of Declarative Languages. Lecture Notes in Computer Science. Vol. 4902. 2008. doi:10.1007/978-3-540-77442-6. ISBN 978-3-540-77441-9.
- "Logtalk compatibility". Logtalk.org. 2016-10-10. Retrieved 2021-07-06.
- "Developer Tools – LogtalkDotOrg/logtalk3 Wiki – GitHub". Github.com. 2013-02-12. Retrieved 2013-08-19.
- Logic Programming. Lecture Notes in Computer Science. Vol. 4079. 2006. doi:10.1007/11799573. ISBN 978-3-540-36635-5.
- Victor Noël; Antonis Kakas (2009). Gorgias-C: Extending Argumentation with Constraint Solving (PDF). Logic Programming and Nonmonotonic Reasoning. Lecture Notes in Computer Science. Vol. 5753. pp. 535–541.
External links
- Official website
- Logtalking blog
- From Plain Prolog to Logtalk Objects: Effective Code Encapsulation and Reuse (Invited Talk). Paulo Moura. Proceedings of the 25th International Conference on Logic Programming (ICLP), July 2009. LNCS 5649. Springer-Verlag Berlin Heidelberg". (Slides)