Logtalk - Logtalk

Logtalk
Paradigme La programmation logique , la programmation orientée objet , programmation basé sur un prototype
Conçu par Paulo Moura
Première apparition 1998 ; il y a 23 ans ( 1998 )
Version stable
3.48.0 / 6 juillet 2021 ; il y a 1 jour ( 2021-07-06 )
Système d'exploitation Multiplateforme
Licence Licence Artistique 2.0 (2.x) / Licence Apache 2.0 (3.01.x)
Site Internet Logtalk .org
Influencé par
Prologue , Smalltalk , Objective-C

Logtalk est un langage de programmation logique orienté objet qui étend et exploite le langage Prolog avec un ensemble de fonctionnalités adaptées à la programmation dans le grand . Il prend en charge l' encapsulation et la dissimulation des données , la séparation des préoccupations et la réutilisation améliorée du code . Logtalk utilise la syntaxe Prolog standard avec l'ajout de quelques opérateurs et directives.

L'implémentation du langage Logtalk est distribuée sous une licence open source et peut s'exécuter en utilisant une implémentation Prolog (conforme aux normes officielles et de facto) comme compilateur back-end .

Caractéristiques

Logtalk vise à réunir les avantages de la programmation orientée objet et de la programmation logique. L'orientation objet met l'accent sur le développement d'unités logicielles discrètes et réutilisables, tandis que la programmation logique met l'accent sur la représentation de la connaissance de chaque objet de manière déclarative.

En tant que langage de programmation orienté objet, les principales fonctionnalités de Logtalk incluent la prise en charge à la fois des classes (avec des métaclasses facultatives ) et des prototypes , des objets paramétriques, des protocoles ( interfaces ), des catégories (composants, aspects , correctifs à chaud ), héritage multiple , public/protégé/privé héritage, programmation événementielle , programmation multithread de haut niveau, réflexion et génération automatique de documentation.

Pour les programmeurs Prolog, Logtalk offre une grande portabilité, avec des espaces de noms de prédicats (prenant en charge les objets statiques et dynamiques), des prédicats d'objets publics/protégés/privés, des prédicats coinductifs , une séparation entre l'interface et l'implémentation, une sémantique de méta-prédicat simple et intuitive, des expressions lambda , une définition grammaires de clauses , mécanisme d'expansion de termes et compilation conditionnelle. Il fournit également un système de modules basé sur la fonctionnalité de module de base standard de facto (en interne, les modules sont compilés en tant que prototypes).

Exemples

La syntaxe de Logtalk est basée sur Prolog :

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

Définir un objet :

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

En utilisant l'objet, en supposant qu'il soit enregistré dans un fichier my_first_object.lgt :

?- logtalk_load(my_first_object).
Hello world
true.

?- my_first_object::p1.
This is a public predicate
true.

Essayer d'accéder au prédicat privé donne une erreur :

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

Fonctions anonymes

Logtalk utilise la syntaxe suivante pour les prédicats anonymes (expressions lambda) :

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

Un exemple simple sans variables libres et utilisant un prédicat de mappage de liste est :

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

Le curry est également pris en charge. L'exemple ci-dessus peut s'écrire :

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

Compatibilité back-end Prolog

Les compilateurs Prolog principaux pris en charge incluent B-Prolog , Ciao Prolog , CxProlog , ECLiPSe , GNU Prolog , JIProlog , Quintus Prolog , Scryer Prolog , SICStus Prolog , SWI-Prolog , Tau Prolog , Trealla Prolog , XSB et YAP . Logtalk permet l'utilisation de bibliothèques de compilateur Prolog back-end à partir d'objets et de catégories.

Outils de développement

Logtalk propose une aide en ligne, un outil de documentation (pouvant générer des fichiers PDF et HTML), un outil générateur de diagramme d'entités, un débogueur intégré (basé sur une version étendue du modèle traditionnel de Procedure Box trouvé sur la plupart des compilateurs Prolog), un cadre de test unitaire avec analyse de couverture de code, et est également compatible avec certains profileurs Prolog back-end et traceurs graphiques.

Applications

Logtalk a été utilisé pour traiter les modèles de données STEP utilisés pour échanger des informations sur la fabrication des produits . Il a également été utilisé pour mettre en œuvre un système de raisonnement qui permet le raisonnement de préférence et la résolution de contraintes .

Voir également

Les références

Liens externes

  • Site officiel
  • Blog de conversation
  • Du simple prolog aux objets Logtalk : encapsulation et réutilisation efficaces du code (conversation invitée). Paulo Moura. Actes de la 25e Conférence internationale sur la programmation logique (ICLP), juillet 2009. LNCS 5649. Springer-Verlag Berlin Heidelberg". ( Diapositives )