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 :

Scrabble en Prolog


Sujet :

Prolog

  1. #1
    Candidat au Club
    Inscrit en
    Mars 2008
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 5
    Points : 2
    Points
    2
    Par défaut Scrabble en Prolog
    Salut,

    je suis un nouvel utilisateur de Prolog et je voudrais avoir de l'aide pour programmer le jeu Scrabble; si vous pouvez m'aider je vous serais très reconnaissant.

    1) Tout dabord, je ne dipose pas d'un dictionnaire donc je sais pas comment faire pour en créer un.

    2) Ecrire un prédicat qui crée des mots à partir d’une liste de lettres. Le prédicat cree_mot(L,X) doit trouver des mots qui utilisent toutes les lettres de la liste L une seule fois. Il devra pouvoir être utilisé ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ?- cree_mot([a,b,c],X).
    X=bac
    Aussi un prédicat qui n'utilise pas toutes les lettres.

    3) Comment faire une liste de listes pour créer le plateau du Scrabble ?

    Merci

  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
    Tout d'abord tu dois posséder un dictionnaire, car sinon, comment vérifier qu'un mot est valide ?
    Au départ ce peut-être simplement une liste de mots, arpès tu pourras regarde sur ce forum comment lire les données d'un fichier.
    Je ne sais pas s'il est judicieux de créer une liste de listes pour simuler le plateau de scrabble, (je n'y ai pas réfléchi en fait) mais as-tu des arguments pour défendre cette structure ?
    "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
    Alp
    Alp est déconnecté
    Expert éminent sénior

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Points : 11 860
    Points
    11 860
    Par défaut
    En fait il suffit "simplement" de réussir à modéliser le fait qu'on peut se servir de telle ou telle lettre pour construire un mot ainsi que la place qui est disponible autour de ce mot. Ensuite, le mot construit doit être dans le dictionnaire, puis on joue le meilleur mot

  4. #4
    Candidat au Club
    Inscrit en
    Mars 2008
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Pour la table de scrabble il est demandé dans l'enonce de faire une liste de liste, si vous avez une autre idee je voudrai bien la connaitre.
    je voudrai aussi savoir s'il a une diference entre travailler en SWI-prolog et sur turbo prolog??

  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
    Si on te demande de faire avec des listes de listes, alors OK, mais bon ....
    Grande différence (pour moi) entre Turbo Prolog et SWI-Prolog : je n'utilises pas Turbo-Prolog, donc je ne pourrais pas t'aider !
    "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

  6. #6
    Candidat au Club
    Inscrit en
    Mars 2008
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Pour créer le fait mot(X) pour chaque mot lu du dictionnaire j'ai fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    see('dictionnaire.txt'),read(T),T<>end_of_file,assert(mot(T)).
    see('dictionnaire.txt'),read(T),T=end_of_file,seen.
    mais ça ne marche pas, une idée ??

  7. #7
    Nouveau Candidat au Club
    Inscrit en
    Mars 2008
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    Bonjour!

    1- Comparer Turbo Prolog au SWI-Prolog c'est comparer le C au C++.
    SWI-Prolog offre plus de possibilités et surtout un nombre important de prédicats prédéfinis en plus avec SWI-Prolog vous n'avez pas à utiliser la syntaxe du Turbo Prolog (PREDICATES, CLAUSES etc.) donc pas de typage explicite en SWI-Prolog.

    2- Vous allez utiliser des listes de caractères donc il vaut mieux charger les mots du dictionnaire en tant que listes que des symboles.

    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
     
    charger(CheminDuDictionnaire) :- 
    see(CheminDuDictionnaire), 
    read(Mot),
    ajouter(Mot),
    seen.
     
    ajouter(end_of_file) :- !.
    ajouter(Mot) :- 
    mot_en_liste(Mot, L), 
    assert(mot(L)),
    read(MotSuivant),
    ajouter(MotSuivant).
     
    mot_en_liste(Mot, L) :- 
    name(Mot, Liste), %Liste est la liste des codes ascii
    liste_ascii_en_liste_char(Liste, L).
     
    liste_ascii_en_liste_char([], []).
    liste_ascii_en_liste_char([N|ASCII], [C|CHAR]) :- 
    ascii_en_char(N, C),
    liste_ascii_en_liste_char(ASCII, CHAR).
     
    ascii_en_char(97, a).
    ....
    ascii_en_char(122, z).
    3- pour creer_mot, vous pouvez générer une permutation de la liste des lettres puis vérifier si elle forme un mot existant dans le dictionnaire.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    creer_mot(L, Mot) :- 
    permuter(L, Mot),
    mot(Mot).
     
    permuter([], []).
    permuter([X|L], [Y|P]) :- 
    combo(Y, L1, [X|L1]),
    permuter(L1, P).
     
    combo(X, L1, [X|L1]).
    /*ce prédicat vérifie si L2 peut être obtenue par une insertion quelconque de X dans L1*/
    combo(X, [Y|L1], [Y|L2]) :- 
    combo(X, L1, L2).
    4- le temps presse et j'espère que ça va bien vous aider.

    Bonne journée!

  8. #8
    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 déjà donné ici un code pour lire un fichier texte.

    A partir des mots (qui ici sont des atomes), on obtient la liste des lettres avec le prédicat atom_chars :
    atom_chars(?Atom, ?CharList) [ISO]
    As atom_codes/2, but CharList is a list of one-character atoms
    rather than a list of character codes.

    ?- atom_chars(hello, X).

    X = [h, e, l, l, o]
    pour creer_mot, vous pouvez vous devez générer une permutation de la liste des lettres puis vérifier si elle forme un mot existant dans le dictionnaire.
    En SWI-Prolog, il y a un prédicat très pratique qui s'appelle... permutation !!!
    permutation(?List1, ?List2)
    Permutation is true when List1 is a permutation of List2. The
    implementation can solve for List2 given List1 or List1 given
    List2, or even enumerate List1 and List2 together.
    Ceci dit, c'est bien aussi de savoir écrire un code pour obtenir des permutatons

    Maintenant pour ce qui est de la recherche des mots dans le dictionnaire, la méthode est très lente. Je préconiserai un pré-traitement des mots du dictionnaire, qui serait de ranger les lettres par odre alphabétique et d'utiliser une liste d'associations.
    Voici un bout de code très utile :
    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
    exemple :-
    	% création du dictionnaire vide
    	empty_assoc(A),
    	% insertion des mots dans le dictionnaire
    	L1 = [bjnooru - bonjour, eentt-nette, alstu - salut, eentt-tente],
    	insert_assoc(L1, A, AF),
    	% recherche des mos associés à une permutation de lettres
    	get_assoc(eentt, AF, L),
    	writeln(L).
     
    insert_assoc([], A, A).
     
    insert_assoc([K - V |T], A1, A2) :-
    	(   get_assoc(K, A1, V1) -> put_assoc(K, A1, [V | V1], AI); put_assoc(K, A1, [V], AI)),
    	insert_assoc(T, AI, A2).
    Sortie :
    [tente, nette]
    "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. Où trouver un environnement pour faire du PROLOG ?
    Par cladsam dans le forum Prolog
    Réponses: 4
    Dernier message: 04/05/2005, 17h12
  2. [Castor] Content is not allowed in prolog.
    Par marsupilamuf dans le forum Format d'échange (XML, JSON...)
    Réponses: 2
    Dernier message: 01/09/2004, 07h59
  3. prolog et scheme
    Par bourvil dans le forum Langages de programmation
    Réponses: 3
    Dernier message: 30/09/2003, 12h09

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