Construction d'une liste : Probleme [OCAML] (Debutant) - Divers - Programmation
Marsh Posté le 08-01-2007 à 08:01:11
tu pourrais essayer de faire de l'ocaml et pas ce truc immonde ?
sinon comment ca se passe si on passe un nombre negatif en borne inf ? en borne sup ? si une des bornes vaut 0 ?
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 !
exemple:
------------
# creer_liste 0 10;;
- : int list = [0; 1; 2; 3; 4; 5; 6; 7; 8; 9; 10]
PS: /!\
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!
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