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 :

Déclaration aléatoire de faits


Sujet :

Prolog

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 11
    Points : 6
    Points
    6
    Par défaut Déclaration aléatoire de faits
    Bonjour,

    Je suis débutante en SWI-Prolog alors excusez moi si mes questions semblent stupides.

    Voila mon probleme : j'aimerai générer un nombre aléatoire de faits aléatoires ...

    Illustration :p :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    %fichier.pl
    coordonnee(1,2).
    coordonnee(5,7).
    coordonnee(4,8).
    %etc...
    Voila c'est bien beau tout ça quand il suffit de le tapper dans un fichier et le charger. Ensuite sous l'interpreteur, je peux poser des questions sur ces faits.

    Seulement voila j'aimerai générer ces faits automatiquement. J'ai fait qques recherches là dessus mais n'ayant pas très bien intégrer la logique prolog je n'arrive pas a utiliser la fonction clause (si c'est bien elle qui faut utiliser ...).

    Merci d'avoir lu jusqu'au bout, j'attends vos conseils avisés ^^
    nyoshi.

  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
    Recherche des renseignements sur
    • dynamic (permet de déclarer un faitdont on peut faire varier les occurences)
    • assert qui permet d'ajouter dans la base de données des faits.
    • random qui permet de générer un nombre aléatoire
    • forall qui permet d'écrire un prédicat itératif en conjonction avec between.
    "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
    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 Trap D
    • forall qui permet d'écrire un prédicat itératif en conjonction avec between.
    Pas d'accord avec cela, car le forall risque de faire des backtracks, et chaque backtrack annulera l'action du assert.

    Il faut se méfier du forall dans ce cas car cela revient à faire de la programmation par effets de bord.

    Ce qu'il faut faire, c'est un prédicat itératif qui bouclera autant de fois que nécessaire.
    "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...

  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
    J'ai testé avant de donner le conseil. Celà fonctionne bien pour ce qui est demandé.
    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
    :- dynamic(faits/2).
     
    % predicat pour obtenir un nombre aléatoire plus grand que 0
    nombre_de_faits(Base, N) :-
    	N1 is random(Base),
    	(   (   N1 = 0, nombre_de_faits(Base, N));
    	N = N1).
     
    test :-
    	% On vide la base des faits
    	retractall(faits(_,_)),
            % on selectionne au plus 10 faits
    	nombre_de_faits(10, N),
    	write('Nombre de faits '), write(N), nl,
    	% on cree les N faits alétaoires
    	forall(between(1,N, _),
    	       (   X is random(100), Y is random(100),
    		   assert(faits(X,Y)))),
     
    	% edition des résultats
    	forall(faits(A,B), writeln(faits(A,B))).
    Resultat :
    1 ?- test.
    Nombre de faits 3
    faits(47, 26)
    faits(56, 37)
    faits(90, 9)
    Bien sûr, dans d'autres cas, suivant les actions entreprisent dans le second argument de forall, celà peut être différent.
    "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
    Citation Envoyé par Trap D
    J'ai testé avant de donner le conseil. Celà fonctionne bien pour ce qui est demandé.
    J'ai pas eu l'occasion de tester. Cependant, il faut rester prudent avec l'utilsation du forall pour autre chose que de vérifier qu'une propriété est vraie pour tout X vérifiant une certaine condition.
    "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...

Discussions similaires

  1. Réponses: 6
    Dernier message: 11/05/2012, 11h49
  2. [JpGraph] Récupérer une valeur de couleur de graphique fait aléatoirement
    Par Clément FREDON dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 18/05/2011, 14h47
  3. programme qui fait deviner une variable aléatoire
    Par hazaki dans le forum Débuter
    Réponses: 3
    Dernier message: 02/10/2010, 10h58
  4. Nombre aléatoire et déclaration de la fonction
    Par petitours dans le forum C++Builder
    Réponses: 7
    Dernier message: 04/05/2008, 01h57
  5. comment se fait la déclaration d'une class?
    Par dardoura2 dans le forum C++
    Réponses: 2
    Dernier message: 10/12/2006, 16h47

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