IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Prolog Discussion :

Base de faits et listes


Sujet :

Prolog

  1. #1
    C_C
    C_C est déconnecté
    Membre régulier
    Inscrit en
    Novembre 2005
    Messages
    139
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 139
    Points : 92
    Points
    92
    Par défaut Base de faits et listes
    Salut,

    Voici mon problème:
    J'ai une base de faits et je veux garder tous les faits dans une liste.
    Les faits:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    object(obj1).
    object(obj2).
    object(obj3).
    object(obj4).
    L'appel du prédicat:
    Et le résultat que j'attends:
    Liste=[obj1,obj2,obj3,obj4,obj5]
    Quelqu'un peut m'aider?
    Si nécessaire je peut montrer ce que j'ai (mal) fait.

  2. #2
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    objects(L) :-
    	bagof(X, object(X), L).
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  3. #3
    C_C
    C_C est déconnecté
    Membre régulier
    Inscrit en
    Novembre 2005
    Messages
    139
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 139
    Points : 92
    Points
    92
    Par défaut
    Et oui...
    J'y avais pas pensé.

    Mais par contre ça ne marche pas pour le cas suivant (toujours dans le même contexte).
    les faits:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    tipo(obj1, table).
    type(obj2, chaise).
    type(obj3, table).
    type(obj4, vase).
    type(obj5, tambour).
    Je veux une liste avec tous les types d'objects sans éléments en double, alors j'utilise 'setof' au lieu de 'bagof'.

    J'ai fait ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    types_objects(L):-setof(X,type(_,X),L).
    mais ça me rend pas la liste complète.

  4. #4
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    Essaye ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    nettoie([], L, L).
     
    nettoie([X|L1], L2, L3) :-
    	memberchk(X, L2), !, nettoie(L1, L2, L3).
     
    nettoie([X | L1], L2, L3) :-
    	append([X], L2, L22), nettoie(L1, L22, L3).
     
    types_objects(L):-
    	findall(X,type(_,X),L1),
    	nettoie(L1, [], L).
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  5. #5
    Rédacteur
    Avatar de pcaboche
    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    2 785
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Singapour

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 785
    Points : 9 716
    Points
    9 716
    Par défaut
    Plus simple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    type(obj1, table).
    type(obj2, chaise).
    type(obj3, table).
    type(obj4, vase).
    type(obj5, tambour).
     
    type2(T) :- type(_, T).
     
     
    types_objects(L):-setof(X, type2(X), L).
    "On en a vu poser les armes avant de se tirer une balle dans le pied..."
    -- pydévelop

    Derniers articles:

    (SQL Server) Introduction à la gestion des droits
    (UML) Souplesse et modularité grâce aux Design Patterns
    (UML) Le Pattern Etat
    Autres articles...

  6. #6
    C_C
    C_C est déconnecté
    Membre régulier
    Inscrit en
    Novembre 2005
    Messages
    139
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 139
    Points : 92
    Points
    92
    Par défaut
    Merci pour vos solutions. Les deux donnent le bon résultat. La différence est que l'utilisation de 'setof' renvoie la liste ordonnée alphabétiquement, mais ce n'est pas important dans ce cas lá.
    D'ailleurs, la solution que j'ai posté est très proche de celle de pcaboche. Il faut que je comprenne la différence entre les deux.
    A+.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Critères de requêtes basées sur valeur de liste d'un formuliare
    Par 7guizz9 dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 22/01/2008, 10h57
  2. [phpMyAdmin] Les bases ne sont plus listées sous la forme d'une liste
    Par loopback dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 2
    Dernier message: 05/01/2008, 15h57
  3. Réponses: 5
    Dernier message: 06/12/2007, 22h16
  4. Réponses: 1
    Dernier message: 15/09/2007, 10h09
  5. Réponses: 6
    Dernier message: 16/07/2007, 17h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo