Bonjour lucci57. Les conseils de Dinoosaure sont particulièrement bons, je te suggère de les suivre. Pour t'en persuader voici une « trace » de ce que tu cherches à faire face à ce qui serait « logique » de faire.
rev [0;1;2;3]
= (rev [1;2;3]) @ [0]
= (rev [2;3] @ [1]) @ [0]
= ((rev [3] @ [2]) @ [1]) @ [0]
= (([3] @ [2]) @ [1]) @ [0]
= ([3; 2] @ [1]) @ [0]
= ({3 :: ([2] @ [1])) @ [0]
= (3 :: [2; 1]) @ [0]
= [3;2;1] @ [0]
= 3 :: ([2;1] @ [0])
= 3 :: (2 :: ([1] @ [0]))
= 3 :: (2 :: [1;0])
= 3 :: [2;1;0]
= [3;2;1;0]
rev_append [0;1;2;3] []
= rev_append [1;2;3] [0]
= rev_append [2;3] [1;0]
= rev_append [3] [2;1;0]
= rev_append [] [3;2;1;0]
= [3;2;1;0]
Il ne te restes plus qu'à coder cette fonction que l'on appelle rev_append. rev_append l1 l2 concatène l1 inversée à la fin de l2. rev_append l1 l2 produit le même résultat que l2 @ (rev l1) mais en bien plus efficace. Comme l'a dit Dinoosaure, on défini généralement rev l1 comme rev_append l1 [].
Cdlt,
Partager