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 :

[Débutant] Problème d'affichage d'éléments de liste


Sujet :

Prolog

  1. #1
    Membre du Club
    Inscrit en
    Janvier 2007
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 37
    Points : 42
    Points
    42
    Par défaut [Débutant] Problème d'affichage d'éléments de liste
    Bonjour, je veux realiser une fonction pour affichier tout les tuple et triplet de N
    par example: test(4,C)
    il doit me repondre
    =>list de toue les elements[4,3,2,1]
    =>tout les triplet
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    [4,3,2]
     
    true ? a[4,3,1]
     
    true[4,2,1]
     
    true[3,2,1]
    =>tout les tuplet
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    [4,3]
     
    true ? a[4,2]
     
    true[4,1]
     
    true[3,2]
     
    true[3,1]
     
    true[2,1]


    mais, maintenant je utiliser une seul fonction pour creer des tuplets et triplets
    ca me donner une mauvais resultat, comment je dois modifer mon programme?

    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
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    | ?- test(4,C).
    [4,3,2,1][4,3,2][4,3]
     
    true ? a[4,2]
     
    true[4,1]
     
    true[3,2]
     
    true[3,1]
     
    true[2,1]
     
    true[4,3,1][4,3]
     
    true[4,2]
     
    true[4,1]
     
    true[3,2]
     
    true[3,1]
     
    true[2,1]
     
    true[4,2,1][4,3]
     
    true[4,2]
     
    true[4,1]
     
    true[3,2]
     
    true[3,1]
     
    true[2,1]
     
    true[3,2,1][4,3]
     
    true[4,2]
     
    true[4,1]
     
    true[3,2]
     
    true[3,1]
     
    true[2,1]
     
    true
     
    (4 ms) no
    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
    list(0,[]).	
    list(N,[N|L]):-
    	N > 0,
    	N1 is N-1,
    	list(N1,L).
     
     
    permutations(0,_,[]).
    permutations(N,[X|T],[X|Comb]):-
    	N>0,
    	N1 is N-1,
    	permutations(N1,T,Comb).
     
    permutations(N,[_|T],Comb):-
    	N>0,
    	permutations(N,T,Comb).
     
     
     
    test(N,C):-
    	list(N,L),
    	write(L),
     
    	permutations(3,L,Triple),
    	write(Triple),
    	permutations(2,L,Tuple),
    	write(Tuple).

  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
    En SWI-Prolog, pour définir une liste de 1 à L, tu as
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    numlist(+Low, +High, -List)
        If  Low and High are integers with Low=< High, unify List to a list
        [Low, Low +1, ...High].  See also between/3.
    "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
    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
    Pour ce qui est créer les combinaisons, tu peux lire cet article.
    "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

  4. #4
    Membre du Club
    Inscrit en
    Janvier 2007
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 37
    Points : 42
    Points
    42
    Par défaut
    Citation Envoyé par Trap D Voir le message
    En SWI-Prolog, pour définir une liste de 1 à L, tu as
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    numlist(+Low, +High, -List)
        If  Low and High are integers with Low=< High, unify List to a list
        [Low, Low +1, ...High].  See also between/3.
    si je veux une liste de 1 à L

    numlist(1,N,L). ?
    mais j'ai utlise gprolog, je sais pas SWI-Prolog.

  5. #5
    Membre du Club
    Inscrit en
    Janvier 2007
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 37
    Points : 42
    Points
    42
    Par défaut
    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
    list(0,[]).	
    list(N,[N|L]):-
    	N > 0,
    	N1 is N-1,
    	list(N1,L).
     
     
    permutations(0,_,[]).
    permutations(N,[X|T],[X|Comb]):-
    	N>0,
    	N1 is N-1,
    	permutations(N1,T,Comb).
     
    permutations(N,[_|T],Comb):-
    	N>0,
    	permutations(N,T,Comb).
    	%write(Comb).	
     
     
    test(N):-
    	list(N,L),
    	%write(L),
    	permutations(2,L,Ls),
    	write(Ls).
    si je teste en test(4).
    le resultat est
    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
     
    | ?- test(4).
    [4,3]
     
    true ? a[4,2]
     
    true[4,1]
     
    true[3,2]
     
    true[3,1]
     
    true[2,1]
     
    true
     
    no
    {1}
    comment je peut modifier pour obtenir une seul list
    [[4,3],[4,2],[4,1],[3,2],[3,1],[2,1]]?

  6. #6
    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
    Salut

    Je ne connais pas très bien gprolog, mais tu peux faire comme celà, des spécialistes me corrigeront sûrement :
    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
    :- dynamic(lst/1).
     
    list(0,[]).	
    list(N,[N|L]):-
    	N > 0,
    	N1 is N-1,
    	list(N1,L).
     
     
    permutations(0,_,[]).
    permutations(N,[X|T],[X|Comb]):-
    	N>0,
    	N1 is N-1,
    	permutations(N1,T,Comb).
     
    permutations(N,[_|T],Comb):-
    	N>0,
    	permutations(N,T,Comb).
     
    get_permutations(L) :-
    		permutations(2, L, Ls),
    		retract(lst(LP)),
    		asserta(lst([Ls|LP])),
    		fail.
     
    test(N):-
    	asserta(lst([])),
    	list(N,L),
    	\+get_permutations(L),
    	lst(LP),
    	write(LP), nl.
    En fait je simule un peu le bagof de SWI-Prolog.
    Je te laisse regarder la doc pour dynamic/1, asserta/1 et retract/1
    "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

  7. #7
    Membre du Club
    Inscrit en
    Janvier 2007
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 37
    Points : 42
    Points
    42
    Par défaut
    Citation Envoyé par Trap D Voir le message
    Salut

    Je ne connais pas très bien gprolog, mais tu peux faire comme celà, des spécialistes me corrigeront sûrement :
    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
    :- dynamic(lst/1).
     
    list(0,[]).	
    list(N,[N|L]):-
    	N > 0,
    	N1 is N-1,
    	list(N1,L).
     
     
    permutations(0,_,[]).
    permutations(N,[X|T],[X|Comb]):-
    	N>0,
    	N1 is N-1,
    	permutations(N1,T,Comb).
     
    permutations(N,[_|T],Comb):-
    	N>0,
    	permutations(N,T,Comb).
     
    get_permutations(L) :-
    		permutations(2, L, Ls),
    		retract(lst(LP)),
    		asserta(lst([Ls|LP])),
    		fail.
     
    test(N):-
    	asserta(lst([])),
    	list(N,L),
    	\+get_permutations(L),
    	lst(LP),
    	write(LP), nl.
    En fait je simule un peu le bagof de SWI-Prolog.
    Je te laisse regarder la doc pour dynamic/1, asserta/1 et retract/1

    j'ai le teste ,une fois lance, ca marche , mais si on continue, c'est faut
    je pense le resultat de combiler est dans le memoire, quelque fonction vous utlisez je pas compris
    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
     
    yes
    | ?- test(4).
    [[2,1],[3,1],[3,2],[4,1],[4,2],[4,3]]
     
    true ? a
     
    no
    | ?- test(3).
    [[2,1],[3,1],[3,2],[2,1],[3,1],[3,2],[4,1],[4,2],[4,3]]
     
    true ? a[[2,1],[3,1],[3,2]]
     
    true
     
    no
    | ?-

  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
    Il y a effectivement une erreur dans mon code, il faut initialiser lst au début en enlevant les mémorisations précédentes de lst.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    test(N):-
    	retractall(lst(_)),
    	asserta(lst([])),
    	list(N,L),
    	\+get_permutations(L),
    	lst(LP),
    	write(LP), nl.
    je ne sais pas si le retractall existe en gprolog
    "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

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 13/12/2010, 09h34
  2. Réponses: 2
    Dernier message: 23/08/2006, 10h05
  3. Problème d'affichage d'éléments adjacents.
    Par julian_ross dans le forum DirectX
    Réponses: 2
    Dernier message: 03/04/2006, 22h50
  4. Problème d'affichage dynamique d'une liste
    Par bor1s dans le forum ASP
    Réponses: 2
    Dernier message: 18/11/2005, 16h18
  5. [débutant]problèmes d'affichage dans un tableau
    Par Hastur dans le forum Balisage (X)HTML et validation W3C
    Réponses: 12
    Dernier message: 16/08/2005, 12h00

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