[Prolog] : ajouter un nombre à la bonne place dans une liste de nb

: ajouter un nombre à la bonne place dans une liste de nb [Prolog] - Divers - Programmation

Marsh Posté le 02-05-2016 à 23:21:24    

Bonjour tout le monde,
 
J'ai besoin de placer un nombre dans une liste où les nombres seraient dans l'ordre croissant.
 
Exemple :
 
?- ajoutenombre(5,[3,7,8,23],X).  
me renverrait :
X = [3,5,7,8,23].
 
J'ai essayé ça... mais ça marche pas :
 
ajout(X,L,[X|L]).    
ajout(X,[Y|L1],[Y|L2]) :- ajout(X,L1,L2).
 
ajoutenombre(X, [T|[]], [T|X]).
ajoutenombre(X, [T|Q], [T2|Q2]) :- T>X, ajout(X, Q, [X|Q]).
ajoutenombre(X, [T|Q], [T2|Q2]) :- T<X, ajoutenombre(X, Q, Q2).

Reply

Marsh Posté le 02-05-2016 à 23:21:24   

Reply

Marsh Posté le 05-05-2016 à 09:29:23    

Il ne faut pas se compliquer la vie :

Code :
  1. % Si le nombre est plus grand que le premier de la liste
  2. % on passe le premier element de la liste et on regarde ce qui se passe après
  3. % on ajoutera H en tête de liste du résultat
  4. ajoute(X, [H|T], [H | Out]) :-
  5.     X >= H, !,
  6.     ajoute(X, T, Out).
  7. % ici on est sur à cause du cut (!) de la clause précédente
  8. % que X est plus petit que H
  9. % donc on met X en tête de liste et c'est fini !
  10. ajoute(X, [H|T], [X, H | T]).

Message cité 1 fois
Message édité par Trap D le 05-05-2016 à 09:30:38
Reply

Marsh Posté le 08-05-2016 à 20:33:31    

Trap D a écrit :

Il ne faut pas se compliquer la vie :

Code :
  1. % Si le nombre est plus grand que le premier de la liste
  2. % on passe le premier element de la liste et on regarde ce qui se passe après
  3. % on ajoutera H en tête de liste du résultat
  4. ajoute(X, [H|T], [H | Out]) :-
  5.     X >= H, !,
  6.     ajoute(X, T, Out).
  7. % ici on est sur à cause du cut (!) de la clause précédente
  8. % que X est plus petit que H
  9. % donc on met X en tête de liste et c'est fini !
  10. ajoute(X, [H|T], [X, H | T]).



 
Merci... je découvre juste le cut ! et c'est niquel ! Merci vraiment pour le coup de pouce !!

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed