在Haskell中使用map应用常量减法

时间:2014-07-25 16:07:16

标签: haskell

我只想从[1,2,3,4]中的每个列表元素中减去1,如

map (-1) [1,2,3,4] -- does not work

map ((-)1) [1,2,3,4] -- gives [0,-1,-2,-3] which is "-listvalue" + 1

map (\x = x - 1) [1,2,3,4] -- what I want but so verbose

map (+ (-1)) [1,2,3,4] -- well :)

map (flip (-) 1) [1,2,3,4] -- I heard of flip before

(map . flip (-)) 1 [1,2,3,4] -- Kinda nice mapped substration composing thingy

map pred [1,2,3,4] -- OK cheated and won't help with -2

我是否会错过一个“正确”和/或Haskell先生使用的表格?

2 个答案:

答案 0 :(得分:4)

您可以使用subtract功能

map (subtract 1) [1,2,3,4]

答案 1 :(得分:3)

你遇到了Haskell设计的一个小瑕疵。表达式(-1)原则上可以用两种方式解释:

  1. 将减法运算符部分应用于其第二个参数的部分。
  2. 将一元符号运算符应用于数字1
  3. Haskell与#2相关。为了弥补这一点,我们提供subtract功能来涵盖案例#1。