Bonjour, Il me semble que seules les valeurs fonctionnelles sont autorisées à droite d'un let-rec. La seule exception est un constructeur de type Effectivement, le "::" n'est pas un véritable opérateur, mais bien un constructeur de type. Prenons le type : type 'a t = Empty | List of 'a * 'a t Si on fait : let cyclique n = let rec liste = List (1, liste) in liste;; ça passe parce que List est bien un constructeur de type. Or dans : let cyclique n = let rec liste = (repète n) @ liste in liste;; l'opérateur @ n'est pas un constructeur, mais bien un appel de fonction qui lie le nom liste à l'appel et c'est précisément ce que le compilateur ne veut pas. Parce qu'il veut que la construction d'une valeur récursif qui n'est ppas une fonction soit statique. Tu as le détail dans le manuel d'Ocaml : http://caml.inria.fr/pub/docs/manual-ocaml/extn.html#s%3aletrecvalues Cordialement, Le 7 septembre 2014 10:31, Jean-Denis Eiden a écrit : > Bonjour à tous, > > CaML light permet la construction suivante : > > #let rec liste = 0::1::2::3::liste;; > liste : int list = > [0; 1; 2; 3; 0; 1; 2; 3; 0; 1; 2; 3; 0; 1; 2; 3; 0; 1; 2; 3; 0; 1; 2; 3; 0; > 1; 2; 3; 0; 1; 2; 3; 0; 1; 2; 3; 0; 1; 2; 3; 0; 1; 2; 3; 0; 1; 2; 3; 0; 1; > 2; 3; 0; 1; 2; 3; 0; 1; 2; 3; 0; 1; 2; 3; 0; 1; 2; 3; 0; 1; 2; 3; 0; 1; 2; > 3; 0; 1; 2; 3; 0; 1; 2; 3; 0; 1; 2; 3; 0; 1; 2; 3; 0; 1; 2; 3; 0; 1; 2; > ...] > > Cela étant, j'aimerais pouvoir faire la même chose en paramétrant la > période ; par exemple, j'aimerais créer [ 0 ; 1 ; 2 ; ... ; n-1 ; 0 ; 1 ; 2 > ; ... ] : > > #let repète n = let aux = ref [] in for i = n-1 downto 0 do aux:= > i::(!aux) done; !aux;; > repète : int -> int list = > > #let cyclique n = let aux = repète n in let rec liste = aux @ liste in > liste;; > > Mais là : > > let cyclique n = let rec liste = (repète n) @ liste in liste;; > >> ^^^^^^^ >> > Ce genre d'expressions n'est pas autorisé comme membre droit d'un "let > rec". > > Est-ce seulement un problème de syntaxe ou bien y a-t-il impossibilité > absolue, la taille de la liste servant de période devant être connue à la > compilation ? > > Cordialement, Jean-Denis Eiden > > > -- > Caml-list mailing list. Subscription management and archives: > https://sympa.inria.fr/sympa/arc/caml-list > Beginner's list: http://groups.yahoo.com/group/ocaml_beginners > Bug reports: http://caml.inria.fr/bin/caml-bugs > -- *Rémy El SibaïeEquipe APR, LIP6/IRILL, Université Pierre et Marie Curie*