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 :

Prédicat récursif : vider la base à chaque itération


Sujet :

Prolog

  1. #1
    Nouveau membre du Club
    Inscrit en
    Août 2006
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 40
    Points : 25
    Points
    25
    Par défaut Prédicat récursif : vider la base à chaque itération
    bonjour,

    J'ai besoin de faire un predicat recursif, mais a chaque iteration, je dois vider la base de connaissances pour y mettre les nouvelles données..

    qlq un a une idee pour vider toute la base?

    avec retractall(_) me donne qu il y a des pb d'instanciation.

  2. #2
    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
    Tu peux utiliser le prédicat abolish/1 ou abolish/2, mais tu ne peux pas vider TOUTE ta base de connaissance d'un coup, il faut abolir les prédicats 1 par 1.
    "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...

  3. #3
    Nouveau membre du Club
    Inscrit en
    Août 2006
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 40
    Points : 25
    Points
    25
    Par défaut
    Voici mon code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    exemple_couvert(Hi, Exp):-
    	base_de_connaissances(Exp),
     
    	faits_positifs(V),
     
    	faits_incertains(I),
    	sublist(PI,I),
    	append(V,PI,M),
     
    	est_un_modele(M,Hi),!,
    	detruire_base_connaissances(Exp).
    S'il trouve que cest un modele il me vide la base, mais s il s'agit pas d'un modele il laisse les mm connaissances (je pense qu il bloque sur (est_un_modele(M,Hi),!,))

  4. #4
    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
    Citation Envoyé par bakhoucha
    (je pense qu il bloque sur (est_un_modele(M,Hi),!,))
    Il bloque sur est_un_modele(M,Hi) et c'est parfaitement normal ! (vu que le but échoue)
    "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...

  5. #5
    Nouveau membre du Club
    Inscrit en
    Août 2006
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 40
    Points : 25
    Points
    25
    Par défaut
    Alors est ce qu il y a une solution pour qu'il vide la base a chaque iteration (avant de re-executer le predicat)??!

  6. #6
    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
    Citation Envoyé par bakhoucha
    (avant de re-executer le predicat)??!
    Dans quels cas veux-tu vider la base de connaissance?
    • avant un appel récursif ?
    • lors du backtrack ?
    • les deux ?
    "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...

  7. #7
    Nouveau membre du Club
    Inscrit en
    Août 2006
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 40
    Points : 25
    Points
    25
    Par défaut
    avant un appel récursif, de sorte a reprendre avec une base vide

  8. #8
    Nouveau membre du Club
    Inscrit en
    Août 2006
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 40
    Points : 25
    Points
    25
    Par défaut
    Voici tout le predicat :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    exemple_couvert(Hi, [Exp|Eplus], [Exp|EC]):- 
    	base_de_connaissances(Exp),
     
    	faits_positifs(V),
     
    	faits_incertains(I),
    	sublist(PI,I),
    	append(V,PI,M),
    	est_un_modele(M,Hi),!,
    	detruire_base_connaissances(Exp),
    	exemple_couvert(Hi, Eplus, EC).

  9. #9
    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
    Et bien dans ce cas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    exemple_couvert(Hi, Exp):-
         base_de_connaissances(Exp),
     
        % du code
     
        detruire_base_connaissances(Exp), 
        exemple_couvert(NouveauHi, Exp).
    Mais il ne faut pas que ce qui se trouve avant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    detruire_base_connaissances(Exp)
    échoue, sinon il n'y a pas d'appel récursif.
    "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...

  10. #10
    Nouveau membre du Club
    Inscrit en
    Août 2006
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 40
    Points : 25
    Points
    25
    Par défaut
    Oui c'est ce que je vois, mais il me faut une solution, mm si le but echoue il doit rappeler le predicat...je fais comment?

  11. #11
    Nouveau membre du Club
    Inscrit en
    Août 2006
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 40
    Points : 25
    Points
    25
    Par défaut
    Sinon je cherhche s'il y a un predicat predefini pour vider la base, que je le met au debut de mon predicat , et comme ca je repart toujours avec une base vide.

  12. #12
    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
    Citation Envoyé par bakhoucha
    Oui c'est ce que je vois, mais il me faut une solution, mm si le but echoue il doit rappeler le predicat...je fais comment?
    Il ne faut pas que le but échoue. Si un but est susceptible d'échouer, c'est qu'il faut ajouter d'autres prédicats:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    exemple_couvert(Hi, Exp):-
          base_de_connaissances(Exp),
          implementation(Hi, Exp).
     
     
     
    implementation(Hi, Exp)
          % A un moment, il faut bien arreter le programme ...
          condition_d_arret(Hi), !,
          detruire_base_connaissances(Exp).
     
     
    implementation(Hi, Exp)
          un_but(Hi, NouveauHi),
          !,
     
          detruire_base_connaissances(Exp),
     
          % Appel récursif
          exemple_couvert(NouveauHi, Exp).
     
     
     
    un_but(Hi, NouveauHi) :-
          un_but_susceptible_d_échouer(Hi, NouveauHi).
     
    un_but(Hi, NouveauHi) :-
          un_autre_but_susceptible_d_échouer(Hi, NouveauHi).
     
    un_but(Hi, NouveauHi) :-
           un_but_qui_reussit_toujours(Hi, NouveauHi).



    Citation Envoyé par bakhoucha
    Sinon je cherhche s'il y a un predicat predefini pour vider la base, que je le met au debut de mon predicat , et comme ca je repart toujours avec une base vide.
    A ma connaissance, ça n'existe pas.
    "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...

  13. #13
    Nouveau membre du Club
    Inscrit en
    Août 2006
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 40
    Points : 25
    Points
    25
    Par défaut
    g procedé de cette maniere :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    verifier_modele(Hi, Exp, 1):-
    	construire_un_modele(Exp,M),
    	est_un_modele(M,Hi),!.
     
    verfifier_modele(_,_,0).
    et puis:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    traiter_couverture(Hi, Exp, R):-
    	verifier_modele(Hi, Exp, _),
    	enlever_exemple(Exp).
    alors il logiquement il doit enlever mon exemple de la base qlq soit la reponse de "verifier_modele"..mais il le fait pas.

    Le pb c que le predicat "verifier_modele" ne fonctionne pas comme prevu: il donne effectivement 1 si c un modele mais il donne "no" sinon et il retourne pas 0...

    Si je peux m'arranger a ce qu il me retourne 0 dans le cas ou le but echoue, je pourrai resoudre le pb...si qlq un peut m'aider sur ce point

  14. #14
    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
    Citation Envoyé par bakhoucha
    Le pb c que le predicat "verifier_modele" ne fonctionne pas comme prevu: il donne effectivement 1 si c un modele mais il donne "no" sinon et il retourne pas 0...
    Tu as une faute de frappe:
    verfifier_modele(_,_,0).
    "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...

  15. #15
    Nouveau membre du Club
    Inscrit en
    Août 2006
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 40
    Points : 25
    Points
    25
    Par défaut
    ahh..la honte
    Merci

  16. #16
    Nouveau membre du Club
    Inscrit en
    Août 2006
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 40
    Points : 25
    Points
    25
    Par défaut
    Bonjour a tous,

    Regardez svp ce prédicat:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    mise_a_jour([],_,_).
    mise_a_jour([Hi|H], Eplus, ENC):-
    	les_exemples_non_couverts_Hi(Hi, Eplus, ENC1),
    	mise_a_jour(H, ENC1, ENC).
    Logiquement il doit me retourner la liste des exemples non couverts, sachant que chaque hypothese Hi couvre un ensemble d'exemple.

    Si je mets , je vois qu'il fait le bon travail, mais le resultat final n'est pas le bon.

    Est ce que c'est bien ce qu'il falleit faire?

  17. #17
    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
    Essaye en remplaçant ceci:
    Par cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mise_a_jour([], ENC, ENC).
    (parce que dans ton exemple, le dernier paramètre n'est jamais unifié).
    "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...

  18. #18
    Nouveau membre du Club
    Inscrit en
    Août 2006
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 40
    Points : 25
    Points
    25
    Par défaut
    Oui ca marche Merci

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

Discussions similaires

  1. Vider une base
    Par arcane dans le forum Requêtes
    Réponses: 13
    Dernier message: 04/12/2012, 22h59
  2. vider une base
    Par looping dans le forum Bases de données
    Réponses: 4
    Dernier message: 04/06/2007, 11h39
  3. [ASE]Vider la base tempdb .
    Par arona dans le forum Sybase
    Réponses: 4
    Dernier message: 23/08/2006, 17h00
  4. [BD vierge] Vider une base de données
    Par Pedro dans le forum Bases de données
    Réponses: 4
    Dernier message: 16/06/2004, 14h40
  5. comment vider une base de donnée
    Par caps_corp dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 21/04/2004, 16h54

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