Si nous voulons carte une fonction qui augmente chaque élément d'une portée de 1, nous pouvons écrire
map (\x -> x + 1) [1..5]
mais je suppose que la plupart des gens il suffit d'aller pour
map (+1) [1..5]
au lieu de cela. Mais de toute évidence, cela ne fonctionne pas avec (-1) puisque c'est négatif.
Donc, la première chose qui vient à l'esprit
map (+(-1)) [1..5]
ce qui serait logique d'envisager comment la soustraction est défini dans le Prélude (x - y = x + negate y
), mais semble un peu étrange pour moi. J'ai ensuite je suis venu avec
map (flip (-) 1) [1..5]
Cela semble quelque peu mieux pour moi, mais il est peut-être un peu trop compliqué.
Maintenant, je sais ce pas une grosse affaire, mais je me demande si je vais manquer un plus évident pour écrire cela? Si non, lequel de ces 2 façons préférez-vous? Je suis vraiment juste demander, car souvent c'est des petits détails comme ça qui font que votre code plus idiomatiques et donc agréable pour les autres développeurs qui doivent le lire.
Solution
Maintenant que j'ai eu quelques réponses, je pense que mon préféré est
map (subtract 1) [1..5]
suivie par
map pred [1..5]
principalement parce que le premier est vraiment explicite et personne n'a besoin de deviner/regarder jusqu'à ce qu' pred
moyen (prédécesseur).