我想给一个高阶函数起个新概念。重要的是,下面是用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]
哈斯克尔:
^{pr2}$正如您可以推断的那样,序列正在被迭代,利用相邻元素作为传递给它的函数的参数,将结果投影到一个新的序列中。那么,有人看到我们创建的功能了吗?功能社区的人对此是否熟悉?如果没有,我们叫它什么名字?在
---- 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]
既然它与“fold”类似,但不会将列表折叠为一个值,那么“crease”怎么样?如果你一直“折痕”,你最终会“折叠”(有点)。在
我们可以用一个烹饪隐喻,称之为“捏”,就像捏馅饼的外壳,尽管这可能意味着一个循环的拉链,其中列表的最后一个元素与第一个元素配对。在
(如果你只喜欢“折痕”或“捏”中的一个,请注意作为评论。这些是单独的建议吗?)在
嗯。。。对位。在
不值得一个名字。在
顺便说一句,水银说:
^{pr2}$阿兹台克数列之神
我在Python中确实看不到任何编码的名称,这是肯定的。”“合并”这个词很好,但在其他各种语境中也有使用“犁头”往往是不用的,它提供了一种很好的视觉效果,可以平稳地推过一排土壤。也许我花了太多时间在园艺上。在
我还扩展了这个原则,允许函数接收任意数量的参数。在
你也可以考虑:褶皱。它很好地描述了你拿一张单子的方式(就像一条长长的织物),并把它的各个部分聚在一起。在
相关问题 更多 >
编程相关推荐