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 :

Comparer une liste avec une liste de mots


Sujet :

Prolog

  1. #1
    Membre à l'essai
    Homme Profil pro
    Etudiant
    Inscrit en
    Février 2020
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Février 2020
    Messages : 17
    Points : 14
    Points
    14
    Par défaut Comparer une liste avec une liste de mots
    Bonjour tout le monde!
    Alors j'ai une liste que je remplis avec des mots , je l'appelle Description
    et j'ai une base de données que je mets sous la forme de liste de liste :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    personnages([[napoleon,reel,politicien,homme,europeen,mort],[trump,homme,reel,politicien,blond,americain,vivant],
    [zidane,homme,reel,footballer,europeen,vivant],[tupac,homme,reel,rappeur,americain,mort],[hercules,homme,hero,aventurier,jeune,mort],
    [sirene,fictif,femme,mort]]).
    Supposons que Description=[reel, politicien,europpen,homme]
    Je voudrais trouver justement le nom correspondant qui se trouve dans ma liste de liste personnages, sachant que dans chaque sous liste sa tete correspond au nom

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    %compte nombre élements d'une liste
    compte([],0).
    compte([_|R],N) :- compte(R,N1), N is N1+1, N>0.
     
    recherche([],[],0,_).
    recherche([[T|Q2]|Q],Input,Nbcommuns,T):-
    intersection(Q2,Input,R),
    compte(R,N),
    (N >= Nbcommuns -> recherche(Q,Input,N,Tete;
    recherche(Q,Input,Nbcommuns,T)
    ).
    L'idée serait donc de faire l'intersection du reste de la liste avec ma liste Descritpion , de compterle nombre d'élement communs puis de garder la liste de la base de données ayant le plus délement communs et densuite renvoyer sa tete correspondant ainsi au nom
    Mais là ca ne larche pas....

  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
    Une possibilité :
    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
    personnages([[napoleon,reel,politicien,homme,europeen,mort],[trump,homme,reel,politicien,blond,americain,vivant],
    [zidane,homme,reel,footballer,europeen,vivant],[tupac,homme,reel,rappeur,americain,mort],[hercules,homme,hero,aventurier,jeune,mort],
    [sirene,fictif,femme,mort]]).
     
    % on n'a pas besoin de connaitre l'intersection
    % uniquement sa longueur
    % on garde aussi le nom du personnage
    test(In, [Head|Tail], [N, Head]) :-
        intersection(In, Tail, Rest),
        length(Rest, N).
     
    ma_selection(In, Out) :-
        personnages(Lst),
        maplist(test(In), Lst, Ret),
        % on trie les résultats selon la longueur de la réponse
        sort(Ret, Ret1),
        % on ne garde que l'élément important de la réponse
        last(Ret1, [_, Out]).
    Résultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ?- ma_selection([politicien, reel], X).
    X = trump.
    A faire : Cette requête donne en fait deux réponses, trump et napoleon, a toi de modifier pour obtenir la liste des deux noms
    "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
    Membre à l'essai
    Homme Profil pro
    Etudiant
    Inscrit en
    Février 2020
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Février 2020
    Messages : 17
    Points : 14
    Points
    14
    Par défaut
    Ca marche, merci,j'ai bien analyser et compris!
    Oui pour tout avoir j'ai fais cela par la suite
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    findall(Out,member([Nmax,Out],Ret1),Liste).

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 05/07/2012, 15h05
  2. [Défis][4] Comparer deux listes de mots
    Par ol9245 dans le forum Contribuez
    Réponses: 9
    Dernier message: 26/06/2012, 18h45
  3. Réponses: 4
    Dernier message: 19/02/2011, 23h47
  4. Réponses: 4
    Dernier message: 15/10/2009, 01h48
  5. Comparer une position GPS avec une liste de POI
    Par alain.lc dans le forum Débuter
    Réponses: 3
    Dernier message: 02/10/2008, 09h47

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