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 :

Retract aléatoire sur des prédicats (dynamic)


Sujet :

Prolog

  1. #1
    Membre actif Avatar de je®ome
    Inscrit en
    Octobre 2005
    Messages
    285
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 285
    Points : 225
    Points
    225
    Par défaut Retract aléatoire sur des prédicats (dynamic)
    Bonjour,

    J'ai 2 questions:

    1)

    est-ce que c'est possible de choisir un fait aléatoirement et de supprimer les autres.
    p.ex. si je dispose de ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    fait(1,4)
    fait(2,4)
    fait(3,4)
    je souhaite éliminer 2 faits.
    Si N fait satifont la condition, je veux en enlever(N-1) aléatoirement.

    2)

    Je souhaite appeler un prédicat avec N entiers différents, mais également aléatoirement.
    p.ex. :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    prédicat(3)
    prédicat(2)
    prédicat(4)
    prédicat(1)
    pour l'instant j'ai fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    between(1,4,N),
    prédicat(N).
    mais ce n'est pas aléatoire.
    Je ne sais pas comment faire pour être sûr de les avoir tous les quatres.
    Sauf créer une liste aléatoire. Mais dans ce cas là, ma question revient à la première,
    comment choper un élément d'une énumération aléatoirement ?


    J'espère que c'est compréhensible.
    Wer nicht probiert, verliert !!

  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
    Ben en gros, la solution à tes problèmes, c'est:

    1. tu crées une liste de toutes les solutions possibles grâce au prédicat findll/3
    2. soit:
    - tu gardes au hasard un élément de la liste et tu supprime les autres
    soit:
    - tu mélanges la liste
    - tu énumères un à un les éléments de la liste grâce au prédicat member/2

    C'est pas compliqué, si ?
    "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
    Membre actif Avatar de je®ome
    Inscrit en
    Octobre 2005
    Messages
    285
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 285
    Points : 225
    Points
    225
    Par défaut
    C'est vrai, ce n'est pas compliqué.
    D' ailleurs c'est ce que voulais faire, mais je ne savais pas comment m'y prendre en prolog.
    J'ai fait ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    aua(Taille):- 
    	between(1,Taille,Y),
    	findall(X,pred(X,Y),L),
    	aua1(L,Y).
    aua1(L,Y):-	
    	length(L,N),
    	N>1,
    	random(0,N,N1),
    	nth0(N1,L,Case),
    	select(Case,L,La),
    	retract(pred(Case,Y)),
    	aua1(La,Y).
    Et ça marche très bien.
    Merci pour cette aide , toute ma partie algo fonctionne à présent, reste à faire une petite interface !!
    P.s. : La solution ne semblait pas tellement simple à une vingtaine de lecteurs du post, sinon il y aurait bien eu quelqu'un avant qui aurait répondu.

    En tout cas, encore merci à toi pcaboche.
    Wer nicht probiert, verliert !!

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

Discussions similaires

  1. Résultat aléatoire avec frac sur des extended
    Par pleomax dans le forum Langage
    Réponses: 6
    Dernier message: 07/12/2011, 20h39
  2. [XPATH] problème sur des prédicats
    Par Smix007 dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 27/04/2010, 11h55
  3. Collision sur des nombres aléatoires
    Par sliderman dans le forum Requêtes
    Réponses: 4
    Dernier message: 03/07/2009, 12h55
  4. Réponses: 1
    Dernier message: 27/01/2009, 14h01
  5. Zoom sur des vecteurs ou lignes
    Par mat.M dans le forum Algorithmes et structures de données
    Réponses: 7
    Dernier message: 25/11/2002, 10h40

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