作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如果我们想要映射一个将范围内的每个元素加 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]
这对我来说看起来更好,但可能有点太复杂了。
现在我知道这没什么大不了的,但我想知道我是否缺少一种更明显的写法?如果没有,您更喜欢这 2 种方式中的哪一种?我真的只是想问一下,因为通常是这样的小细节使您的代码更加惯用,从而让其他必须阅读它的开发人员感到愉快。
解决方案
既然我得到了几个答案,我想我个人最喜欢的是
map (subtract 1) [1..5]
其次是
map pred [1..5]
主要是因为第一个非常明确,没有人需要猜测/查找 pred
的含义(前身)。
最佳答案
如果您想进行右节减法,可以使用 subtract
函数代替 -
:
map (subtract 1) [1..5]
关于haskell - 柯里化(Currying)减法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4454559/
我是一名优秀的程序员,十分优秀!