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 :

SWI-Prolog trouver le métier [Débutant(e)]


Sujet :

Prolog

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 2
    Points : 1
    Points
    1
    Par défaut SWI-Prolog trouver le métier
    Bonsoir,

    je dois trouver le métier de 6 artisans :
    M. Boulanger (père et fils)
    M. Charpentier (père et fils)
    M. Boucher (père et fils)
    On sait que :
    - chacun des six fait un des métiers indiqués par ces noms de familles (c’est-à-dire le métier de boulanger, boucher ou charpentier), cependant le métier de chacun est différent de celui désigné par son nom de famille (par exemple aucuns des deux boucher père ou fils ne fait le métier de boucher).
    - aucuns des fils ne fait le même métier que son propre père.
    - M. Boulanger le père fait le même métier que M. Charpentier le fils.
    -M. Boucher le fils est boulanger.

    Voici mon code:
    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
    32
    %les 3 métiers
     
    metier(boulanger).
    metier(boucher).
    metier(charpentier).
     
     
    %les 3 fils:
     
    fils(fboulanger).
    fils(fboucher).
    fils(fcharpentier).
     
     
    %les 3 pères
     
    pere(pboulanger).
    pere(pboucher).
    pere(pcharpentier).
     
     
     
     
    %j'ai mis "p" pour signifier père et "f" pour fils au début de chaque nom de famille
     
    exerce(pboulanger,X) :-metier(X), X\==boulanger.
    exerce(pcharpentier,X) :-metier(X), X\==charpentier.
    exerce(pboucher,X) :-metier(X), X\==boucher.
     
    exerce(fboulanger,X) :-metier(X), X\==boulanger.
    exerce(fcharpentier,X) :-metier(X), X\==charpentier.
    exerce(fboucher,X) :- metier(X), X==boulanger.
    Mon problème est que je n’arrive pas à « dire » à prolog qu’aucuns fils ne fait le même métier que son propre père et que le M. Boulanger le père fait le même métier que M. Charpentier le fils.
    J'ai essayé plusieurs méthodes mais c'est la seule qui se rapproche de ce que je veux.

    Merci d'avance à celles et/ou ceux qui voudront m'aider

    ps: j'ai réussi à trouver le métier de chacun sans prolog mais bon c'est pas vraiment le but...

  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
    On peut écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    professions_differentes(Pere, Fils) :-
    	exerce(Pere, PE),
    	exerce(Fils, FE),
    	PE \== FE.
    "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
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Bonjour,

    merci de votre réponse

    voici le code que j'ai tapé en tenant compte de votre remarque:
    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
    32
    33
    34
    35
    %les 3 metiers
     
    metier(boulanger).
    metier(boucher).
    metier(charpentier).
     
     
    %les 3 fils:
     
    fils(fboulanger).
    fils(fboucher).
    fils(fcharpentier).
     
     
    %les 3 peres
     
    pere(pboulanger).
    pere(pboucher).
    pere(pcharpentier).
     
     
     
     
    exerce(pboulanger, PE) :-metier(PE), PE \== boulanger.
    exerce(pcharpentier, PE) :-metier(PE), PE \== charpentier.
    exerce(pboucher, PE) :-metier(PE), PE \== boucher.
     
    exerce(fboulanger, FE) :-metier(FE), FE \== boulanger.
    exerce(fcharpentier, FE) :-metier(FE), FE \== charpentier.
    exerce(fboucher, FE) :- metier(FE), FE == boulanger.
     
     
    professions_differentes(pere, fils):- exerce(pere, PE), exerce(fils, FE), PE \== FE.
     
    professions_iddentiques(pboulanger,fcharpentier):-exerce(pboulanger, PE), exerce(fcharpentier, FE), PE == FE.
    mais ça ne me donne pas le résultat attendu...

  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
    De toute façon, il faut écrire un prédicat de lancement de la recherche de la solution.
    Il faut s'inspirer de la résolution du problème d'Einstein (ou du problème du zèbre) dans le forum Prolog.
    "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

Discussions similaires

  1. [Swi-Prolog][Xpce] Alignement négatif
    Par je®ome dans le forum Prolog
    Réponses: 4
    Dernier message: 12/03/2007, 13h37
  2. Réponses: 1
    Dernier message: 09/01/2007, 14h33
  3. Le mode debug de swi-prolog
    Par Boubou Balrog dans le forum Prolog
    Réponses: 2
    Dernier message: 18/12/2006, 10h55
  4. Désactiver les warnings en swi-prolog
    Par Cecilka dans le forum Prolog
    Réponses: 2
    Dernier message: 15/12/2006, 11h33
  5. Réponses: 3
    Dernier message: 03/05/2006, 15h30

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