À mon avis ces exemples n'ont pas leur place dans un cours.
Pas plus dans une FAQ si on la limite à une liste de Q/R.
Mais ce n'est pas une raison pour ne pas les collecter.
Remarque: pensez quand même à préciser où sont les erreurs, et ce qu'il conviendrait de faire pour les corriger
Exemple proposé par Alex_pi :
Envoyé par EnoncéCe code est faux et incorrect par rapport à l'énoncé, il renverra toujours 1 quelque soient les valeurs de n et p.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 (* wrong code *) let rec binomial(n,p) = match p with | 0 -> 1 | n -> 1 | _ -> binomial(n-1,p) + binomial(n-1,p-1) ;;
En effet, le compilateur vous explique que la 3ième clause ne sera jamais utilisée:
La raison c'est que la 2nd clause masque la 3ième parce que n est une nouvelle variable.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 Characters 65-66: Warning U: this match case is unused. | _ -> binomial(n-1,p) + binomial(n-1,p-1)
Une clause dans un filtrage n'est pas une conditionnelle (comme if p = n then 1) mais une déclaration (comme let n = p in 1).
Pour faire un test d'égalité utilisez plutôt une conditionnelle, comme ici:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 (* correct code *) let rec binomial(n,p) = if p = 0 or p = n then 1 else binomial(n-1,p) + binomial(n-1,p-1) ;;
Partager