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 :

Boucle et encore boucle


Sujet :

Prolog

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Mars 2007
    Messages
    4
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Mars 2007
    Messages : 4
    Points : 1
    Points
    1
    Par défaut Boucle et encore boucle


    Pouvez-vous m'aider sur la boucle suivante? J'ai une propriete, disons "fatigue", qui est defini (predicat "def") sur des intervals (par exemple int(5,10), int(10,15), int(15,25) ).

    def(fatigue, int(5,10)).
    def(fatigue, int(10,15)).
    def(fatigue, int(15,25)).
    J'aimerai qu'avec la requete def(fatigue, X), mon cher Prolog me retourne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    def(fatigue, int(5, 10)) 
    def(fatigue, int(10, 15))
    def(fatigue, int(15, 25))
    def(fatigue, int(5, 15))
    def(fatigue, int(10, 25))
    def(fatigue, int(5, 25))
    Voilà. la reponse est sans aucun doute tres simple, mais je ne l ai pas.

    J ai essaye avec:

    defa(int(I,F1)) :-
    def(int(I, F1)),
    not defa(int(F1, F)).

    defa(int(I,F)) :-
    def(int(I, F1)),
    bound(F1),
    defa(int(F1, F)).
    mais ma requete est du type defa(fatigue, X) et non plus def(fatigue, X).

    Une barre de chocolat pour le premier qui trouve!!!

  2. #2
    Membre confirmé Avatar de billynirvana
    Homme Profil pro
    Architecte technique
    Inscrit en
    Décembre 2004
    Messages
    472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2004
    Messages : 472
    Points : 552
    Points
    552
    Par défaut
    Je n'aime pas les trucs préfabriqués, donc je ne vais utiliser ton int, mais
    partons du principe que l'on ait l'ensemble des prédicats:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    def(fatigue, 5, 10)->;
    def(fatigue, 10, 15)->;
    def(fatigue, 15, 20)->;
    def(fatigue, 20, 25)->;
    si j'exécute le but suivant:

    j'obtiens:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    {{x=5; y=10}, {x=10; y=15}, , {x=15; y=20}, {x=20; y=25}}
    si ca peut t'aider!

  3. #3
    Nouveau Candidat au Club
    Inscrit en
    Mars 2007
    Messages
    4
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Mars 2007
    Messages : 4
    Points : 1
    Points
    1
    Par défaut


    mais ca ne m'aide vraiment pas, car il me manque toutes les solutions qui m'interesse, i.e.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    {{x=5; y=15}, {x=5; y=20}, , {x=5; y=25} ... etc }

  4. #4
    Membre confirmé Avatar de billynirvana
    Homme Profil pro
    Architecte technique
    Inscrit en
    Décembre 2004
    Messages
    472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2004
    Messages : 472
    Points : 552
    Points
    552
    Par défaut
    Ca marche pas ce truc?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    def(fatigue, 5, 10)->;
    def(fatigue, 10, 15)->;
    def(fatigue, 15, 20)->;
    def(fatigue, 20, 25)->;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    def(fatigue, x, y)->
    	def(fatigue, x, z);
    	def(fatigue, z, y);

  5. #5
    Nouveau Candidat au Club
    Inscrit en
    Mars 2007
    Messages
    4
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Mars 2007
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Tel quel ca ne marche pas, car mon prolog ne le trouve pas "valide". Pour le rendre valide, et sachant que je connais peu la synthaxe if then else -> ; j ai essayé avec:

    def(fatigue, 5, 10).
    def(fatigue, 10, 15).
    def(fatigue, 15, 20).
    def(fatigue, 20, 25).

    def(fatigue, X, Y) :-
    def(fatigue, X, Z),
    def(fatigue, Z, Y).
    Est-ce equivalent? L'ensemble des réponses données n'est toujours pas satisfaisant puisqu'il ne me repond pas def(fatigue, 10, 25) par exemple, et puis la derniere clause boucle infiniment.

  6. #6
    Membre confirmé Avatar de billynirvana
    Homme Profil pro
    Architecte technique
    Inscrit en
    Décembre 2004
    Messages
    472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2004
    Messages : 472
    Points : 552
    Points
    552
    Par défaut
    1- Pour la syntaxe, oui effectivement, je n'utilise pas la même que toi. Donc il faut adapter avec ta version.
    2- La boucle infinie est normale car les variables ne sont jamais liées...

    Je pense qu'il n'existe pas de solution simple. Pour résoudre ton problème, il faut passer par un but avec un nom différent.

    Par contre, il pourrait existeer des librairies permettant de gérer ton problème mais c'est contre nature Prolog .

    EDIT: un truc du genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    defa(fatigue, x, y)->	
    	def(fatigue, x, y);
     
    defa(fatigue, x, y)->
    	def(fatigue, x, z)
    	defa(fatigue, z, y);

  7. #7
    Nouveau Candidat au Club
    Inscrit en
    Mars 2007
    Messages
    4
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Mars 2007
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    En effet, ca boucle .

    Du reste, mais qu'est ce donc que c'est que cette synthaxe? Est ce la synthaxe dite de Marseille? Quelle est son utilité?

  8. #8
    Membre confirmé Avatar de billynirvana
    Homme Profil pro
    Architecte technique
    Inscrit en
    Décembre 2004
    Messages
    472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2004
    Messages : 472
    Points : 552
    Points
    552
    Par défaut
    C'est la syntaxe historique du Prolog, celle dite de Marseille, plus précisément de l'université de Luminy Marseile où ce langage a été développé.

    A bientot

Discussions similaires

  1. [PHP 5.0] Manipulation XML une boucle dans une boucle
    Par lepotier dans le forum Langage
    Réponses: 2
    Dernier message: 10/03/2010, 12h15
  2. [LV 8.6] Problème de boucle dans une boucle
    Par Quent' dans le forum LabVIEW
    Réponses: 10
    Dernier message: 28/05/2009, 16h49
  3. Boucle dans une boucle
    Par macgor dans le forum Scripts/Batch
    Réponses: 0
    Dernier message: 27/02/2009, 18h07
  4. [Tableaux] une boucle qui ne boucle pas
    Par taly dans le forum Langage
    Réponses: 9
    Dernier message: 19/09/2006, 17h25
  5. [Tableaux] Boucle dans une boucle
    Par spawns dans le forum Langage
    Réponses: 2
    Dernier message: 12/02/2006, 13h11

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