[OCAML] (Debutant) Construction d'une liste : Probleme

Construction d'une liste : Probleme [OCAML] (Debutant) - Divers - Programmation

Marsh Posté le 07-01-2007 à 15:56:06    

Bonjour à tous !
 
J'aimerai construire une liste d'int (privée de 0) a partir de deux int (respectivement borne inférieure et borne supérieure ). Concretement quelquechose du style :  
creer_liste 5 4 -> [-5;-4;-3;-2;-1;1;2;3;4]
 
j'ai écris le code suivant :
 
let creer_liste inf sup = (*inf = borne inférieure sup = borne supérieure*)
  let liste = [] in
  for i= (-inf) to sup do
  if inf <> 0 then liste@[inf]  
  done;
;;
 
Malheuresement ce code ne compile pas ...
 
Une solution ?


Message édité par teemu le 07-01-2007 à 15:57:01
Reply

Marsh Posté le 07-01-2007 à 15:56:06   

Reply

Marsh Posté le 08-01-2007 à 08:01:11    

tu pourrais essayer de faire de l'ocaml et pas ce truc immonde ? [:dawa]
 
sinon comment ca se passe si on passe un nombre negatif  en borne inf ? en borne sup ? si une des bornes vaut 0 ?

Reply

Marsh Posté le 04-03-2008 à 00:00:21    

Voila une solution, en utilisant la récursivité(~à une utiliser une boucle)
 
 
# let rec creer_liste inf sup= if (inf>sup) then  
                                []
                             else
                                inf::creer_liste (inf+1) sup;;    
 
   
(et voici le resultat du typage :val creer_liste : int -> int -> int list = <fun> )

explications:
----------------
-Le case de base( appelé cas trivial) est celui où la borne inf est > a la borne Sup. Dans ce cas 'ya rien a faire, on renvoit une liste vide.Ce cas est fondamental, c'est lui qui permet d'eviter que ta fonction recursive boucle a l'infini!
 
-Sinon (c'est le cas general) en utilsant la récursivité, le probleme se resume a dire çà:
<< le resultat de la  création d'une liste entre a et b, c'est   : le resulat de l 'ajout de  a en tête,  de la liste crée entre a+1 et b  >>
 
et voila :p !
 
exemple:
------------
 
# creer_liste 0 10;;
- : int list = [0; 1; 2; 3; 4; 5; 6; 7; 8; 9; 10]
 
 
PS: /!\ :fou:  
 
quand tu utilses la fonction avec un entier <0 , ecris celui ci entre parenthèse, sinon Ocaml  penses que tu fais une soustraction.
 
# creer_liste (-1) 1;;
- : int list = [-1; 0; 1]
 
Voila, j'espere que c'était assez claire, sinon  n'hésites pas , à me demander d'autres explications! :)      


---------------
>>>www.tineonline.tk<<<
Reply

Sujets relatifs:

Leave a Replay

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