J'ai l'habitude de pouvoir définir des arguments optionnels de la sorte en Python :
def product(a, b=2):
return a * b
Haskell n'a pas d'arguments par défaut, mais j'ai pu obtenir quelque chose de similaire en utilisant un Maybe :
product a (Just b) = a * b
product a Nothing = a * 2
Cependant, cette procédure devient très vite encombrante si vous avez plus de plusieurs paramètres. Par exemple, si je veux faire quelque chose comme ceci :
def multiProduct (a, b=10, c=20, d=30):
return a * b * c * d
Il me faudrait huit définitions de multiProduit pour tenir compte de tous les cas.
Au lieu de cela, j'ai décidé d'opter pour ceci :
multiProduct req1 opt1 opt2 opt3 = req1 * opt1' * opt2' * opt3'
where opt1' = if isJust opt1 then (fromJust opt1) else 10
where opt2' = if isJust opt2 then (fromJust opt2) else 20
where opt3' = if isJust opt3 then (fromJust opt3) else 30
Cela me semble très inélégant. Existe-t-il un moyen idiomatique plus propre de faire cela en Haskell ?
2 votes
Combien de paramètres une fonction doit-elle prendre en compte ? vraiment prendre ? ;-)
0 votes
Je ne pense pas que ce soit le exactes même question, donc je ne voterai pas trop près, mais c'est assez similaire à la question de la stackoverflow.com/questions/2790860/
1 votes
@MatrixFrog Cette question concerne les arguments des fonctions. Cette question concerne les valeurs des types de données.
0 votes
Il peut être judicieux de modifier votre fonction pour qu'elle prenne une structure de données contenant quatre nombres, au lieu de prendre les quatre nombres séparément. Dans ce cas, vous pouvez utiliser la solution de cette autre question.