Besoin d'aide en CamL
Résolu
delfre56
Messages postés
350
Date d'inscription
Statut
Membre
Dernière intervention
-
delfre56 Messages postés 350 Date d'inscription Statut Membre Dernière intervention -
delfre56 Messages postés 350 Date d'inscription Statut Membre Dernière intervention -
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
Bonjour,
"comment faire pour qur mes deux trucs se fassent en même temps"
Tu devrais utiliser une structure begin/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 :
"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 = functionLa confiance n'exclut pas le contrôle
| [] -> []
| a::b -> (reverse b)@[a];;
reverse [1; 2; 3; 4; 5];;
delfre56
Messages postés
350
Date d'inscription
Statut
Membre
Dernière intervention
48
Merci beaucoup ! Par contre pour la deuxième partie tu es rentré dans des trucs que je ne sais pas faire, on commence tout juste à voir ce que c'est que le patern matching, alors un truc comme ça... o0