currying vs partial function application

转载 2017年03月20日 16:46:30

The easiest way to see how they differ is to consider a real example. Let's assume that we have a function Add which takes 2 numbers as input and returns a number as output, e.g. Add(7, 5)returns 12. In this case:

  • Partial applying the function Add with a value 7 will give us a new function as output. That function itself takes 1 number as input and outputs a number. As such:

    Partial(Add, 7); // returns a function f2 as output
    
                     // f2 takes 1 number as input and returns a number as output
    

    So we can do this:

    f2 = Partial(Add, 7);
    f2(5); // returns 12;
           // f2(7)(5) is just a syntactic shortcut
    
  • Currying the function Add will give us a new function as output. That function itself takes 1 number as input and outputs yet another new function. That third function then takes 1 number as input and returns a number as output. As such:

    Curry(Add); // returns a function f2 as output
    
                // f2 takes 1 number as input and returns a function f3 as output
                // i.e. f2(number) = f3
    
                // f3 takes 1 number as input and returns a number as output
                // i.e. f3(number) = number
    

    So we can do this:

    f2 = Curry(Add);
    f3 = f2(7);
    f3(5); // returns 12
    

In other words, "currying" and "partial application" are two totally different functions. Currying takes exactly 1 input, whereas partial application takes 2 (or more) inputs.

Even though they both return a function as output, the returned functions are of totally different forms as demonstrated above.

[Python for Data Analysis] Python Basic--Function

argument可以是scalar type, 也可以是list等data structure,可以是function object都可以Positional arguments and keywo...
  • jaskson
  • jaskson
  • 2016年02月10日 09:43
  • 184

Currying & Partial[applied] function 初体验

参考文献 1、王家林.scala深入浅出实战经典 2、http://www.cnblogs.com/nixil/archive/2012/05/16/2503722.html 3、http://spr...
  • PENGYUCHENG32109
  • PENGYUCHENG32109
  • 2016年03月22日 22:58
  • 315

函数Currying和Partial Application的比较

本文由“外刊IT评论”网(www.aqee.net)荣誉出品 【名词解释】Currying:因为是美国数理逻辑学家哈斯凯尔·加里(Haskell Curry)发明了这种函数使用技巧,所以这样用法...
  • u010708434
  • u010708434
  • 2014年10月04日 14:02
  • 394

[Python] partial改变方法默认参数

Python 标准库中 functools 中有许多对方法hen
  • lzz957748332
  • lzz957748332
  • 2014年08月18日 10:33
  • 1941

关于vs2013中使用partial类后仍提示某成员变量不存在时的问题解决

在使用vs2013开发过程中,定义了一个类的两个partial部分,不过却在一个partial类中出现了某定义好的变量无法使用(当前上下文不存在“”)的问题,此时应检查引用的命名空间,或许可以解决,以...
  • u010116861
  • u010116861
  • 2015年08月10日 14:34
  • 482

5.5.3.1 散函数应用(PARTIAL FUNCTION APPLICATION)

5.5.3.1 散函数应用(PARTIALFUNCTION APPLICATION)   要展示对函数的这种新理解情况,非常重要,让我们把注意力返回到列表。假设有一个数字列表,我们想要给列表中的每...
  • hadstj
  • hadstj
  • 2014年10月24日 20:08
  • 548

【python】偏函数 functools partial

Python的functools模块提供了很多有用的功能,其中一个就是偏函数(Partial function)functools.partial的作用就是,把一个函数的某些参数(不管有没有默认值)给...
  • u010141025
  • u010141025
  • 2014年12月12日 16:35
  • 2997

《STL源码剖析》—— stl_config.h

参考侯捷《STL源码剖析》 #ifndef __STL_CONFIG_H # define __STL_CONFIG_H // 本文件所做的事情: // (1) 如果编译器没有定义 bool,t...
  • bolike
  • bolike
  • 2014年02月12日 22:26
  • 1370

函数柯里化function currying

函数柯里化function currying, 函数柯里化的基本方法和函数绑定是一样的:使用一个闭包返回一函数;两者的区别是,当函数被调用时,方茴的函数还需要设置一些传入的参数;function a...
  • power8988
  • power8988
  • 2017年08月25日 07:23
  • 69

"Partial Class"详解

相信使用过.NET 1.0/1.1 (VS.NET 2003)的朋友都知道,原先的窗体设计代码和业务逻辑是写在一起的。如下图所示:图1然而,当我们升级到.NET2.0之后,使用VS2005的朋友都会发...
  • bruesz
  • bruesz
  • 2007年12月19日 14:36
  • 672
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:currying vs partial function application
举报原因:
原因补充:

(最多只允许输入30个字)