|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité de passage
![]() Maths Spé : MP Inscription : août 2012 Messages : 11 ![]() |
Bonjour,
je dois écrire une fonction réalisant l'addition de deux nombres définis par une une liste de chiffres. Voilà ce que j'ai fait, mais comme je le craignais ça ne marche pas let rec addition n1 n2 = let retenue = ref 0 in match (n1 , n2) with ([] , []) -> [] |([] , t::q) -> (t + !retenue):: (addition [] q) |(t::q , []) -> (t + !retenue):: (addition [] q) |(t1::q1 , t2::q2) -> (t1+t2 mod 10 + !retenue):: (addition q1 q2); retenue:= ( t1+t2 - (t1+t2 mod 10) )/10 ;; retenue:= ( t1+t2 - (t1+t2 mod 10) )/10 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Cette expression est de type unit, mais est utilisée avec le type int list. Cette façon de faire est-elle impossible ? Merci ! |
|
|
00
|
|
|
#2 | ||||||||
|
Membre actif
![]() Valentin RobertÉtudiant Inscription : juin 2004 Messages : 70 ![]() |
Code :
- je ne suis pas certain de la bonne priorite de (t1 + t2 mod 10). Ce n'est pas parce que tu ecris (t1+t2 mod 10) que ce sera ((t1 + t2) mod 10) et pas (t1 + (t2 mod 10)). Dans le doute je parenthese pour faciliter ma relecture. - l'utilisation de la retenue dans ce code est douteuse. Par exemple, dans la branche finale, tu mets a jour la retenue _apres_ tous les calculs, ce qui ne sert a rien (puisque la retenue est une variable locale a la fonction addition). Peut-etre que ce que tu veux c'est avoir : Code :
Code :
Code :
EDIT : Et si tu souhaites vraiment rendre la valeur d'une retenue a la fin, il va falloir que tu precises quelle valeur tu veux renvoyer. Et tu peux la renvoyer sous forme d'une paire (resultat, retenue). --- EDIT2 : Je ne te donne pas de solution car ca ressemble a un devoir maison ou a un exercice d'entrainement, et ce serait mieux que tu y arrives seul. Sinon autre remarque, si tu fais des additions de nombres de longueur arbitraire, tu n'es pas cense avoir de retenue finale :\ Donc il faudrait preciser ce que tu essaies de renvoyer...
__________________
Apprendre Haskell vous fera le plus grand bien ! |
||||||||
|
10
|
Copyright © 2000-2013 - www.developpez.com