Movatterモバイル変換


[0]ホーム

URL:


Jump to content
WikipediaThe Free Encyclopedia
Search

Logtalk

From Wikipedia, the free encyclopedia
Logtalk
ParadigmLogic programming,object-oriented programming,prototype-based programming
Designed byPaulo Moura
First appeared1998; 28 years ago (1998)
Stable release
3.66.0 / 30 May 2023; 2 years ago (2023-05-30)
OSCross-platform
LicenseArtistic License 2.0 (2.x) /Apache License 2.0 (3.01.x)
Websitelogtalk.org
Influenced by
Prolog,Smalltalk,Objective-C

Logtalk is anobject-orientedlogic programming language that extends and leverages theProlog language with a feature set suitable forprogramming in the large.[1] It provides support forencapsulation and data hiding,separation of concerns and enhancedcode reuse.[1] Logtalk uses standard Prolog syntax with the addition of a few operators and directives.

The Logtalk language implementation is distributed under anopen source license and can run using a Prolog implementation (compliant with official and de facto standards)[1] as theback-end compiler.

Features

[edit]

Logtalk aims to bring together the advantages of object-oriented programming and logic programming.[1] 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 bothclasses (with optionalmetaclasses) andprototypes, 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 predicatenamespaces (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

[edit]

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

[edit]
This section is an excerpt fromExamples of anonymous functions § Logtalk.[edit]

Logtalk uses the following syntax for anonymous predicates (lambda expressions):

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

A simple example with no free variables and using a list mapping predicate is:

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

Currying is also supported. The above example can be written as:

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

Prolog back-end compatibility

[edit]

Supported back-end Prolog compilers includeB-Prolog,Ciao Prolog, CxProlog,ECLiPSe,GNU Prolog, JIProlog,Quintus Prolog, Scryer Prolog,SICStus Prolog,SWI-Prolog, Tau Prolog, Trealla Prolog,XSB, andYAP.[4] Logtalk allows use of back-end Prolog compiler libraries from within object and categories.

Developer tools

[edit]

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

[edit]

Logtalk has been used to processSTEP data models used to exchangeproduct manufacturing information.[6] It has also been used to implement a reasoning system that allows preference reasoning andconstraint solving.[7]

See also

[edit]

References

[edit]
  1. ^abcdPaulo Moura (2003). Logtalk: Design of an Object-Oriented Logic Programming Language. PhD thesis. Universidade da Beira Interior
  2. ^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.
  3. ^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.
  4. ^"Logtalk compatibility". Logtalk.org. 2016-10-10. Retrieved2021-07-06.
  5. ^"Developer Tools – LogtalkDotOrg/logtalk3 Wiki – GitHub". Github.com. 2013-02-12. Retrieved2013-08-19.
  6. ^Logic Programming. Lecture Notes in Computer Science. Vol. 4079. 2006.doi:10.1007/11799573.ISBN 978-3-540-36635-5.
  7. ^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

[edit]
  • 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)
Retrieved from "https://en.wikipedia.org/w/index.php?title=Logtalk&oldid=1255258168"
Categories:
Hidden categories:

[8]ページ先頭

©2009-2026 Movatter.jp