неверный синтаксис
мы хотим отобразить функцию, которая увеличивает каждый элемент диапазона на 1, мы могли бы написать
map (\x -> x + 1) [1..5]
но я думаю, что большинство людей просто
map (+1) [1..5]
вместо. Но это, очевидно, не работает с (-1), поскольку это отрицательный.
Итак, первое, что пришло в голову, было
map (+(-1)) [1..5]
что имеет смысл, учитывая, как вычитание определяется в Prelude (x - y = x + negate y
), но выглядит немного странно для меня. Я тогда придумала
map (flip (-) 1) [1..5]
Это как-то выглядит лучше для меня, но, возможно, немного сложнее.
Теперь я знаю, что в этом нет ничего страшного, но мне интересно, не хватает ли мне более очевидного способа написать это? Если нет, какой из двух способов вы бы предпочли? Я просто спрашиваю, потому что часто такие мелкие детали делают ваш код более идиоматичным и, следовательно, приятным для других разработчиков, которые должны его читать.
Решение
Теперь, когда я получил пару ответов, я думаю, что мой личный фаворит
map (subtract 1) [1..5]
с последующим
map pred [1..5]
в основном потому, что первый действительно явный и никому не нужно гадать / искать чтоpred
значит (предшественник).