我试图命名我认为是高阶函数的新想法。对于重要的部分,这里是用 Python 和 Haskell 来演示这个概念的代码,后面会解释。
Python:
>>> def pleat(f, l):
return map(lambda t: f(*t), zip(l, l[1:]))
>>> pleat(operator.add, [0, 1, 2, 3])
[1, 3, 5]
哈斯克尔:
Prelude> let pleatWith f xs = zipWith f xs (drop 1 xs)
Prelude> pleatWith (+) [0,1,2,3]
[1,3,5]
正如您可能推断的那样,正在迭代序列,利用相邻元素作为您传递它的函数的参数,将结果投影到新序列中。那么,有人看过我们创建的功能吗?这对职能社区的人来说是不是很熟悉?如果不是,我们给它取什么名字?
---- Update ----
褶皱赢了!
Prelude> let pleat xs = zip xs (drop 1 xs)
Prelude> pleat [1..4]
[(1,2),(2,3),(3,4)]
Prelude> let pleatWith f xs = zipWith f xs (drop 1 xs)
Prelude> pleatWith (+) [1..4]
[3,5,7]