Je dois rédigez en Caml une fonction :
Code : Tout sélectionner
decoupages : ’a list -> (’a list * ’a list) list
J'ai fait une première version de cette forme
Code : Tout sélectionner
let rec decoupe = fun
| [] -> [[],[]]
| (h::q) -> let (a,b)::p = decoupe_av q in [[h],q]@[h::a, b];;
J'ai essayé pour palier à ça de faire un fonction intermédiaire, qui renverait par exemple la découpe à droite pour une valeur donnée... Sauf qu'il nous est expressement interdit d'accéder à la longueur d'une liste... Donc pas moyen de faire évoluer le paramètre a dans l'algo suivant...
Code : Tout sélectionner
let rec decoupe_arr = fun
| a [] -> []
| 0 (h::q) -> q
| a (h::q) -> decoupe_arr (a-1) q;;
Code : Tout sélectionner
let rec intervalle = fun
| 0 0 l -> []
| 0 b (h::q) -> h::(intervalle 0 (b-1) q)
| a b (h::q) -> intervalle (a-1) b q
| a b [] -> [];;
Ho évidemment je n'ai droit qu'au récursif haha...
La réponse doit être assez simple je pense, mais je n'arrive vraiment pas à mettre le doigt dessus... Je ne suis pas contre un petit coup de pouce o/