Sortie de la version 1.1 de la bibliothèque Castor
Découvrez la programmation « Logique » en C++

Le , par Davidbrcz, Rédacteur
Bonjour à tous,

La programmation logique est un paradigme de programmation qui prend le courant inverse des langages de programmations impératifs. Plutôt que de décrire la méthode pour résoudre le problème (écrire un algorithme et le coder), elle consiste à décrire les données dont on dispose sur le problème, les règles pour les manipuler, à poser une question puis attendre que l'ordinateur trouve seul la réponse. Le prolog est le principal langage qui utilise ce paradigme.

Néanmoins d'autres langages, via des bibliothèques ou des extensions, supportent ce paradigme. En particulier on peut citer C++ avec la bibliothèque Castor qui vient de sortir en version 1.1. Au menu de cette nouvelle version, on peut trouver.
  • l'operateur >>= pour créer des "TakeLeft relations" (abrégé TLRs)
  • Des exemples de TLR: group_by, order, reduce, count, skip ...
  • Le support des coroutines.
  • De nouvelles relations comme shuffle, max_of, reduce_of, pause, item_map, ...
  • De nouvelles ILE (Inline Logic Reference Expressions)
  • Des améliorations pour le support des ILEs et des lref


Toutes ces nouvelles fonctions sont détaillées dans une vidéo en deux parties (partie 1, partie 2)

Télécharger Castor

Que pensez vous de Castor et en particulier de cette nouvelle version ?
Pensez vous l'utiliser dans vos projets ?

Toujours disponible : Présentation de la programmation logique avec Castor


Vous avez aimé cette actualité ? Alors partagez-la avec vos amis en cliquant sur les boutons ci-dessous :


 Poster une réponse

Avatar de elmcherqui elmcherqui - Membre averti http://www.developpez.com
le 20/08/2010 à 12:50
Merci David , j'avais tellement envie de toucher a la programmation logique mais l'apprentissage d'un nouveau langage m'a dissuadé .
Encore Merci pour cette bibliothèque et des liens
Avatar de Joel F Joel F - Membre chevronné http://www.developpez.com
le 20/08/2010 à 22:14
Y a des expressions templates derrières ou bien c'ets tout en full dynamique (question de design, ton truc sent le EDSL à 1km )
Avatar de Goten Goten - Membre chevronné http://www.developpez.com
le 21/08/2010 à 10:56
@joel : non je crois pas que ça soit basé sur des ET. Mais mes souvenirs sont flou :p.

Note au passage que castor a été plus ou moins proposé pour être intégré à boost. Mais je crois pas que ça ai donné grand chose car l'auteur ne voulait pas introduire de dépendances.
Avatar de Davidbrcz Davidbrcz - Rédacteur http://www.developpez.com
le 21/08/2010 à 11:50
Joel >> Même s'il y a une forte utilisation des templates, ca reste dynamique même si je ne garantie pas ma réponse à 100%, les DSEL n'étant pas (pour le moment) ma spécialités.
Avatar de Fabllot Fabllot - Membre éclairé http://www.developpez.com
le 23/08/2010 à 12:55
Bonjour,

Est-ce que la programmation logique décrite ici, ne serait pas relativement proche de la programmation dite "par contraintes" ?
En c++, il existe Gecode, qui est très puissant mais une véritable usine à gaz !

Dans ce type de programmation, on décrit un état initial puis un certain nombre de contraintes (ou règles) de différents poids. C'est ensuite le système qui trouve une solution ou un ensemble de solution...

Cela ressemble étrangement à Castor !
Avatar de Davidbrcz Davidbrcz - Rédacteur http://www.developpez.com
le 23/08/2010 à 13:31
Citation Envoyé par Fabllot  Voir le message
Bonjour,

Est-ce que la programmation logique décrite ici, ne serait pas relativement proche de la programmation dite "par contraintes" ?
En c++, il existe Gecode, qui est très puissant mais une véritable usine à gaz !

Dans ce type de programmation, on décrit un état initial puis un certain nombre de contraintes (ou règles) de différents poids. C'est ensuite le système qui trouve une solution ou un ensemble de solution...

Cela ressemble étrangement à Castor !

La programmation par contrainte est une branche de la programmation logique où on dispose d'un jeu de n variables liées entre elles par des règles (les contraintes) et où le but du jeu est de déterminer le (ou les) n-uplet où toutes les contraintes sont satisfaites.

La programmation logique est plus large que cela. Une fois que les faits sont établis (c'est à dire qu'on dispose d'un tas d'information plus ou moins disparate sur le sujet) et les règles pour les manipuler aussi , on va poser une question. Cette question peut être de deux natures : soit elle va ere une assertion (est ce que machin vérifie la propriété P) ou alors générative (Quel est l'ensemble des éléments qui vérifient la proprité P).

La programmation par contrainte est assez "mathématique", la programmation par logique est plus proche de la logique humaine.
Avatar de Fabllot Fabllot - Membre éclairé http://www.developpez.com
le 23/08/2010 à 14:25
Citation Envoyé par Davidbrcz  Voir le message
La programmation par contrainte est une branche de la programmation logique où on dispose d'un jeu de n variables liées entre elles par des règles (les contraintes) et où le but du jeu est de déterminer le (ou les) n-uplet où toutes les contraintes sont satisfaites.

En faisant quelques recherches sur le web c'est effectivement ce que j'ai compris.

La programmation logique est plus large que cela. Une fois que les faits sont établis (c'est à dire qu'on dispose d'un tas d'information plus ou moins disparate sur le sujet) et les règles pour les manipuler aussi , on va poser une question. Cette question peut être de deux natures : soit elle va ere une assertion (est ce que machin vérifie la propriété P) ou alors générative (Quel est l'ensemble des éléments qui vérifient la proprité P).

Là je ne suis que moyennement d'accord... La programmation par contrainte permet justement de trouver tous les n-uplets, sous-entendu, si il n'y en a qu'un seul, on est dans le cas "logique" où on recherche quels sont les éléments qui vérifient une propriété... Par contraintes, on peut ne pas définir certaines régles et trouver tout de même des solutions... Est-ce le cas avec en programmation logique ? Et les assertions en programmation par contraintes on les résoud directement...

La programmation par contrainte est assez "mathématique"

Entièrement d'accord avec toi !
la programmation par logique est plus proche de la logique humaine.

Là, je ne peux me prononcer, il faudrait que j'étudie un peu plus la question... mais c'est probable.
Avatar de jblecanard jblecanard - Membre expert http://www.developpez.com
le 23/08/2010 à 15:45
Bonne nouvelle ce Castor ! Car s'interfacer avec du prolog depuis C++, ça doit pas être de la tarte. Je ne me sers pas actuellement de prolog, mais pour l'avoir étudié rapidement, j'aime bien son côté un peu "magique" pour résoudre les problèmes.

Citation Envoyé par Davidbrcz  Voir le message
La programmation par contrainte est assez "mathématique", la programmation par logique est plus proche de la logique humaine.

La logique reste une théorie mathématique précisément formalisée.
Avatar de Davidbrcz Davidbrcz - Rédacteur http://www.developpez.com
le 23/08/2010 à 16:44
Citation Envoyé par Fabllot  Voir le message
Là je ne suis que moyennement d'accord... La programmation par contrainte permet justement de trouver tous les n-uplets, sous-entendu, si il n'y en a qu'un seul, on est dans le cas "logique" où on recherche quels sont les éléments qui vérifient une propriété... Par contraintes, on peut ne pas définir certaines régles et trouver tout de même des solutions... Est-ce le cas avec en programmation logique ? Et les assertions en programmation par contraintes on les résoud directement...

La PPC va permettre de trouver les n-uplets qui vérifient les contraintes. Mais étant donnée un n-uplet, il est facile (plus ou moins selon le nombre de contrainte) de vérifier s'il est valide.

En PL, on peut à la fois générer des réponses à une question mais aussi demander à l'ordinateur de vérifier notre assertion quand ce n'est pas trivial. Pour le détail, regarde ceci

Citation Envoyé par jblecanard  Voir le message
Bonne nouvelle ce Castor ! Car s'interfacer avec du prolog depuis C++, ça doit pas être de la tarte. Je ne me sers pas actuellement de prolog, mais pour l'avoir étudié rapidement, j'aime bien son côté un peu "magique" pour résoudre les problèmes.

Il n'y aucun lien direct entre castor et prolog ! Castor n'est en aucun cas un binding entre C++ et Prolog. Castor est une bibliothèque (au même titre que Qt ou boost) entièrement écrite en C++ qui permet d'émuler la programmation logique en C++ .

Citation Envoyé par Fabllot  Voir le message
La logique reste une théorie mathématique précisément formalisée.

Certes, mais la PL s'éloigne de la notion de variable (et des valeurs possible qu'elle peut prendre) pour plus travailler sur les entités, leurs propriétés et les déductions qu'on peut en tirer avec les règles qu'on a.
Avatar de jblecanard jblecanard - Membre expert http://www.developpez.com
le 23/08/2010 à 17:22
Citation Envoyé par Davidbrcz  Voir le message
Il n'y aucun lien direct entre castor et prolog ! Castor n'est en aucun cas un binding entre C++ et Prolog. Castor est une bibliothèque (au même titre que Qt ou boost) entièrement écrite en C++ qui permet d'émuler la programmation logique en C++ .

J'avais bien compris ! Je me mettais dans une situation ou l'on a pas castor et ou l'on veut faire de la PL en C++.

Citation Envoyé par Davidbrcz  Voir le message
Certes, mais la PL s'éloigne de la notion de variable (et des valeurs possible qu'elle peut prendre) pour plus travailler sur les entités, leurs propriétés et les déductions qu'on peut en tirer avec les règles qu'on a.

Je ne vois pas en quoi ça contredis mon propos
Avatar de Davidbrcz Davidbrcz - Rédacteur http://www.developpez.com
le 23/08/2010 à 17:37
J'avais bien compris ! Je me mettais dans une situation ou l'on a pas castor et ou l'on veut faire de la PL en C++.

Ah, oki. C'est beaucoup plus clair comme ca. Et non, ce n'est pas si dur, cf ceci (ok c'est que pour swi prolog, mais c'est quand même ca)

Je ne vois pas en quoi ça contredis mon propos

Nul part ! C'était plus un complément qu'autre chose.
Offres d'emploi IT
Expert sécurité en audit d'applications (H/F)
Société Générale - Ile de France - Val-de-Marne
Développeur - software craftsman (H/F)
Société Générale - Ile de France - Hauts-de-Seine
Technical leader / moe perle (H/F)
Société Générale - Ile de France - Val de Marne

Voir plus d'offres Voir la carte des offres IT
Contacter le responsable de la rubrique Accueil