这个部分应用程序是否有一个名称 - 就像函数式编程技术一样?

时间:2011-06-02 16:24:10

标签: functional-programming partial-application

我有一个函数f: (a, b, c = 5, d = 0) -> {...},它需要2到4个参数。

我想传递此函数的“绑定”版本,该版本始终使用最后一个参数的默认值,但对前两个参数使用特定值(比如1和2)。也就是说,我想要g: () -> f(1, 2)

如果我要进行部分申请,我会得到g': (c = 5, d = 0) -> f(1, 2, c, d)。也就是说,部分应用程序不会强制执行我想要的g的零参数性质,而是给我g',其中包含0到2个参数。

g调用f获取{{1}}的技巧是什么?

1 个答案:

答案 0 :(得分:2)

发表我的评论作为答案:似乎这个问题与函数式编程或currying或部分应用程序几乎没有关系,而是正是关于采用一个带有默认值的可选参数的函数,并创建一个新函数没有可修改默认参数的可选参数。

调用此概念转换T。假设由于某种原因,部分应用程序意味着可选参数仍然是可选的(不需要是通用的,但是再一次,熟悉的函数式编程语言--Haskell等 - 甚至都没有可选参数),至少有两种方法可以从g获得f

    • f: (a, b, c = 5, d = 0) -> {....},需要2到4个参数。
    • 生成新函数T(f) : (a,b) -> {...},它只需要2个参数。也就是T(f)(a,b) = f(a,b) = f(a,b,5,0)
    • 现在对T(f)进行部分应用,将其两个参数固定为1和2,并调用结果函数g。也就是g() = T(f)(1,2) = f(1,2) = f(1,2,5,0)

    • f: (a, b, c = 5, d = 0) -> {....},需要2到4个参数。
    • f上部分应用将前两个参数修改为1和2,然后调用生成的函数g'。也就是g' : (c=5, d=0) -> f(1, 2, c, d)。它需要0到2个参数。
    • 生成新函数T(g) : () -> {....},该函数只取0个参数。也就是T(g)() = g'() = g'(5, 0) = f(1, 2, 5, 0)
  1. 无论如何,问题中的窘境似乎取决于T,而不是函数式编程或currying或部分应用的任何方面。我不知道T是否有足够的要点来获得标准名称,但是像“修复/绑定默认参数”这样的东西应该没问题。