Logtalk Explained

Logtalk
Paradigm:Logic programming, object-oriented programming, prototype-based programming
Designer:Paulo Moura
Latest Release Version:3.66.0
Operating System:Cross-platform
License:Artistic License 2.0 (2.x) / Apache License 2.0 (3.01.x)
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.[1] 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,[2] protocols (interfaces), categories (components, aspects, hot patching), multiple inheritance, public/protected/private inheritance, event-driven programming, high-level multi-threading programming,[3] 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 worldtrue.

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 worldtrue.

?- my_first_object::p1.This is a public predicatetrue.

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

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.[4] 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.[5]

Applications

Logtalk has been used to process STEP data models used to exchange product manufacturing information.[6] It has also been used to implement a reasoning system that allows preference reasoning and constraint solving.[7]

See also

External links

Notes and References

  1. Paulo Moura (2003). Logtalk: Design of an Object-Oriented Logic Programming Language. PhD thesis. Universidade da Beira Interior
  2. 10.1007/978-3-642-20589-7_4. Programming Patterns for Logtalk Parametric Objects. Applications of Declarative Programming and Knowledge Management. 6547. Lecture Notes in Computer Science. 2011. Moura . Paulo. 978-3-642-20588-0.
  3. Book: 10.1007/978-3-540-77442-6. Practical Aspects of Declarative Languages. 4902. Lecture Notes in Computer Science. 2008. 978-3-540-77441-9.
  4. Web site: Logtalk compatibility . Logtalk.org . 2016-10-10 . 2021-07-06.
  5. Web site: Developer Tools – LogtalkDotOrg/logtalk3 Wiki – GitHub . Github.com . 2013-02-12 . 2013-08-19.
  6. Book: 10.1007/11799573. Logic Programming. 4079. Lecture Notes in Computer Science. 2006. 978-3-540-36635-5.
  7. Logic Programming and Nonmonotonic Reasoning . . 2009 . 5753 . 535–541 . [ftp://ftp.irit.fr/IRIT/SMAC/DOCUMENTS/PUBLIS/lpnmr-09_noel-kakas.pdf Gorgias-C: Extending Argumentation with Constraint Solving ]. Victor Noël . Antonis Kakas .