Besoin d'aide en CamL
Résolu
Bonjour,
Je suis étudiant en première année de licence en informatique et notre prof de programmation nous fait travailler sur CamL (oui, je sais...)
toujours est-il que je bloque sur un programme qui sert à retourner une liste.
let l2 = [] in
let rec reverse(l) = if est_seq_vide(l) then l2
else ajout_debut(premier(l),l2), reverse(reste(l);;
est_seq_vide(l) permet de savoir si une liste l est vide ou pas, ajout_debut(a,l) ajoute un élément a au début d'une liste l et premier(l) isole le premier élément d'une liste.
Ma question est simple : j'aimerais, comme vous pouvez le voir, que ma section "else" fasse deux choses en même temps, à la fois faire ajout_debut(premier(l),l2) et à la fois reverse(reste(l) (algorithme réccursif azi tavu)
Bref, mettre une virgule comme je l'ai fait ne semble pas suffir, CamL me renvoie une erreur syntaxe sur... Les ;; à la fin --' Si quelqu'un s'y connait un peu en CamL et est capable de me dire comment faire pour qur mes deux trucs se fassent en même temps, je suis preneur :)
Merci d'avance pour vos réponses !
Je suis étudiant en première année de licence en informatique et notre prof de programmation nous fait travailler sur CamL (oui, je sais...)
toujours est-il que je bloque sur un programme qui sert à retourner une liste.
let l2 = [] in
let rec reverse(l) = if est_seq_vide(l) then l2
else ajout_debut(premier(l),l2), reverse(reste(l);;
est_seq_vide(l) permet de savoir si une liste l est vide ou pas, ajout_debut(a,l) ajoute un élément a au début d'une liste l et premier(l) isole le premier élément d'une liste.
Ma question est simple : j'aimerais, comme vous pouvez le voir, que ma section "else" fasse deux choses en même temps, à la fois faire ajout_debut(premier(l),l2) et à la fois reverse(reste(l) (algorithme réccursif azi tavu)
Bref, mettre une virgule comme je l'ai fait ne semble pas suffir, CamL me renvoie une erreur syntaxe sur... Les ;; à la fin --' Si quelqu'un s'y connait un peu en CamL et est capable de me dire comment faire pour qur mes deux trucs se fassent en même temps, je suis preneur :)
Merci d'avance pour vos réponses !
1 réponse
-
ModérateurBonjour,
"comment faire pour qur mes deux trucs se fassent en même temps"
Tu devrais utiliser une structure begin/end.
let rec reverse l =
if (est_seq_vide l)
then l2
else begin
ajout_debut ((premier l), l2);
reverse (reste l);
end;;
Remarque : en Caml on utilise plutôt le paradigme fonctionnel, donc les structures if/then/else sont généralement à bannir, car elles sont issus du paradigme impératif.
En fonctionnel, il faudrait plutôt utiliser des structures de pattern matching. Exemple :
let rec reverse = function
La confiance n'exclut pas le contrôle
| [] -> []
| a::b -> (reverse b)@[a];;
reverse [1; 2; 3; 4; 5];;