Logtalk

Logtalk
Pojawienie się

1998

Paradygmat

programowanie logiczne, programowanie obiektowe

Pochodne

Prolog, Smalltalk, Objective-C

Aktualna wersja stabilna

3.33.0

Twórca

Paulo Moura

Licencja

Licencja Artystyczna (2.x) / Apache License (3.01.x)

Strona internetowa

Logtalkzorientowany obiektowo logiczny język programowania, który rozszerza i wykorzystuje język Prolog z zestawem funkcji odpowiednich do programowania na dużą skalę. Zapewnia obsługę enkapsulacji i ukrywania danych, separacji problemów i ulepszonego ponownego wykorzystania kodu. Logtalk używa standardowej składni Prologu z dodatkiem kilku operatorów i dyrektyw.

Implementacja języka Logtalk jest rozpowszechniana na licencji open source i może działać przy użyciu implementacji Prologu (zgodnej z oficjalnymi i de facto standardami)[1] jako kompilator back-endowy.

Funkcje

Logtalk ma na celu połączenie zalet programowania obiektowego i programowania logicznego. Orientacja obiektowa kładzie nacisk na tworzenie dyskretnych, wielokrotnego użytku jednostek oprogramowania, podczas gdy programowanie logiczne kładzie nacisk na reprezentowanie wiedzy o każdym obiekcie w sposób deklaratywny.

Jako język programowania zorientowanego obiektowo, główne funkcje Logtalk obejmują obsługę zarówno klas (z opcjonalnymi metaklasami)[1], jak i prototypów, obiektów parametrycznych, protokołów (interfejsów), kategorii (komponentów, aspektów, poprawiania na gorąco), dziedziczenia wielokrotnego, publicznego/chronionego/prywatnego dziedziczenie, programowanie sterowane zdarzeniami, programowanie wielowątkowe wysokiego poziomu, refleksja i automatyczne generowanie dokumentacji.

Programistom języka Prolog, Logtalk zapewnia dużą przenośność, obejmując przestrzenie nazw (obsługujące zarówno obiekty statyczne, jak i dynamiczne), przestrzenie nazw obiektów publicznych/chronionych/prywatnych, predykaty koindukcyjne, separację między interfejsem a implementacją, prostą i intuicyjną semantykę metapredykatów, wyrażenia lambda, gramatyki klauzul, mechanizm rozszerzania terminów i kompilacja warunkowa. Zapewnia również system modułowy oparty na de facto standardowej podstawowej funkcjonalności modułu (wewnętrznie moduły są kompilowane jako prototypy).

Przykłady

Składnia języka Logtalk jest podobna do Prologa:

?- write('Hello world'), nl.
Hello world
true.

Definiowanie obiektu:

:- object(moj_pierwszy_obiekt).

    :- initialization((write('Hello world'), nl)).

    :- public(p1/0).
    p1 :- write('To jest predykat publiczny'), nl.

    :- private(p2/0).
    p2 :- write('To jest predykat prywatny'), nl.

:- end_object.

Korzystając z obiektu, zakładając, że jest zapisany w pliku moj_pierwszy_obiekt.lgt:

?- logtalk_load(moj_pierwszy_obiekt).
Hello world
true.

?- moj_pierwszy_obiekt::p1.
To jest predykat publiczny
true.

Próba uzyskania dostępu do prywatnego predykatu wyrzuca błąd:

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

Narzędzia dla deweloperów

Logtalk zawiera pomoc on-line, narzędzie do dokumentowania (które może generować pliki PDF i HTML), narzędzie do przedmiotowego generowania diagramów, wbudowany debugger (oparty na rozszerzonej wersji tradycyjnego modelu Procedure Box znajdującego się w większości kompilatorów Prologu), framework do testów jednostkowych z analizą pokrycia kodu, a także jest kompatybilny z wybranymi profilerami Prologu zaplecza i graficznymi znacznikami[2].

Zobacz też

Przypisy

  1. a b Paulo Moura (2003). Logtalk: Design of an Object-Oriented Logic Programming Language. PhD thesis. Universidade da Beira Interior.
  2. LogtalkDotOrg/logtalk3 [online], GitHub [dostęp 2020-10-19] (ang.).

Linki zewnętrzne

Content Disclaimer

Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.

  1. The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
  2. There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
  3. It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
  4. Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
  5. Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.