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 :

Aide pour un code Prolog


Sujet :

Prolog

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

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Aide pour un code Prolog
    Bonjour à tous et à toutes,

    Voila, je suis nouveau et je viens de m'inscrire pour solliciter votre aide car je vais devenir fou

    Etant en fac informatique (1er année), j'ai un devoir à rendre en Prolog, le seul problème, c'est que ça fait 3 semaines que j'y arrive... Pas.

    J'ai lu de nombreux tuto (dont ceux présentés ici) mais rien, je sais pas y doit y avoir un truc qui me coince ou quoi mais impossible d'arriver au résultat voulu !!

    J'utilise : SWI-Prolog (Multri-threaded, version 6.2.2) et je code sur un vulgaire bloc note en .pl


    Voila mon sujet :

    Dans le village, il y a six artisans:
    MM Boulanger, père et fils ;
    MM Boucher, père et fils ;
    MM Charpentier, père et fils.

    1. Chacun des six fait un des métiers indiqués par ces trois noms de famille (boulanger, boucher, charpentier) ; cependant, le métier de chacun est différent de celui désigné par son nom de famille (par exemple, aucun des deux Boulanger – père ou fils – ne fait le métier de boulanger).

    2. Aucun des fils ne fait le même métier que son propre père.

    3. M. Boulanger le père fait le même métier que M. Charpentier le fils.

    4. M. Boucher le fils est boulanger.

    -Quel est le métier exercé par chacun des six personnages ?


    Ca peut vous sembler simple mais pour moi cet énoncé représente l'enfer

    Et maintenant voila mon... je peux même pas dire code tellement ça doit ressembler à rien

    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
    % les faits :
     
    % les 3 métiers :
    metier(boulanger).
    metier(boucher).
    metier(charpentier).
     
    % les 3 familles :
    famille(boulanger).
    famille(boucher).
    famille(charpentier).
     
    % les 6 personnes :
    personne(boulangerpere).
    personne(boulangerfils).
    personne(boucherpere).
    personne(boucherfils).
    personne(charpentierpere).
    personne(charpentierfils).
     
    % les règles :
     
    boulanger(boucherfils).
     
    relation(boucherpere,charpentier):-boulanger(boucherfils).
    relation(boulangerpere,boucher):-boucher(charpentierfils).
    relation(boulangerfils,charpentier):-boucher(boulangerpere).
    relation(charpentierpere,boulanger):-boucher(charpentierfils).
    Il doit même être incomplet tellement j'ai modifié de choses mais je suis totalement désespéré la ><

    Aidez moi s'il vous plaîîîîîîîîît !!!!

    Merci de m'avoir lu et à bientôt j'espère

  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
    Ceci ressemble fort à cette discussion !
    A mon avis il faut definir une entité (un tuple) personne(Nom, Metier).
    On peut initialiser les tuples avec les noms, puis créer des règles correspondant aux conditions imposées par l'énoncé.
    A l'aide du backtrack, Prolog trouvera la solution.
    "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
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Mmm en effet !!

    J'irai voir le problème du zèbre, je m'y remettrai ce soir, la je suis juste mort cérébralement

    Dans tous les cas, merci de ta réponse

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

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Bonjour !!

    Après avoir "étudié" l'autre topic, je me suis demandé si son dernier code était exact ou du moins si je pouvais en partir (vu qu'il dis n'y ne trouve pas le résultat attendu). Cependant je me suis dis qu'il ne formulait peut être pas la bonne question !! Mais moi même je la cherche encore

    Sérieusement pourquoi j'arrive à rien en prolog ><

    Donc est ce la peine que je continue à chercher la question ? Qui est forcément différente de mon ancien code, ou vaut mieux que je recommence tout (une fois de plus) par rapport au problème du zèbre (auquel je comprends pas grand chose d'ailleurs ^^')

    Merci d'avance et bonne journée !

  5. #5
    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
    Bonjour
    Voilà le début de ma solution, peut-être qu'elle correspond à ce qui a été écrit sur S.O.
    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
    36
    37
    38
    39
    metier(boulanger).
    metier(boucher).
    metier(charpentier).
     
    % les métiers sont définis dans les faits
    init_metier(personne(_,_,Metier)) :-
    	metier(Metier).
     
    go :-
    	% on cree directement la liste des différentes personnes
    	% a mon avis ce n'est pas ça qui est important dans le problème
    	Persons =
    	[personne(boulanger, pere, _MBLP),
    	 personne(boulanger, fils, _MBLF),
    	 personne(boucher, pere, _MBCP),
    	 personne(boucher, fils, _MBCF),
    	 personne(charpentier, pere, _MCP),
    	 personne(charpentier, fils, _MCF)],
     
    	% on initialise les métiers
    	% Boucher fils est boulanger.
    	member(personne(boucher, fils, boulanger), Persons),
     
    	maplist(init_metier, Persons),
     
    	%  on exprime que les metiers sont differents du nom
    	forall(member(personne(Name, _, Metier), Persons),
    		...........................),
     
    	% on exprime que pere et fils n'ont pas le meme
    	forall(............................................................................,
    			 ...................................),
     
    	% Boulanger père fait le même métier que Charpentier fils.
    	.......................................................
    	......................................................
     
    	% affichage des resultats
    	maplist(writeln, Persons).
    Ce code fonctione avec SWI-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. Aide pour un code Vba
    Par NEC14 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 15/10/2007, 16h03
  2. [FTP] besoin d'aide pour source code
    Par planete-venus dans le forum Langage
    Réponses: 1
    Dernier message: 02/06/2007, 15h01
  3. aide pour un code
    Par foulla002 dans le forum Sécurité
    Réponses: 3
    Dernier message: 03/08/2006, 09h56
  4. aide pour un code
    Par foulla002 dans le forum Langage
    Réponses: 7
    Dernier message: 18/07/2006, 11h04
  5. aide pour du code svp
    Par rootsngaia dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 12/04/2006, 23h40

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