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.

相关文章推荐

Scala 函数柯里化(Function currying)

部分应用的函数 和其他遵循函数式编程范式的语言一样,Scala 允许部分应用一个函数。 调用一个函数时,不是把函数需要的所有参数都传递给它,而是仅仅传递一部分,其他参数留空; 这样会生成一个新的函数...

Scala之Partially Applied Function和Currying

Partially Applied Function在开始之前,还是让我们说说”apply”这个术语怎么解释吧。在scala里,我们认为:把一个参数传递给函数的过程就叫apply, 在传统的编程语言里...

Scala之偏函数Partial Function

本文原文出处: http://blog.csdn.net/bluishglc/article/details/ 严禁任何形式的转载,否则将委托CSDN官方维护权益!从使用case语句构造匿名函数谈起在...

PostgreSQL partial/sub commit within function

PostgreSQL的函数是原子操作,所以不能像Oracle那样在函数中实现分段提交。 但是如果你要从Oracle迁移到PostgreSQL的话,必然会面临这样的问题,那么怎么办呢? 有几种方法可...

python 中 partial function 骗函数的使用介绍

Python的functools模块提供了很多有用的功能,其中一个就是偏函数(Partial function)。要注意,这里的偏函数和数学意义上的偏函数不一样。 在介绍函数参数的时候,我们讲到,通...

Scala课堂-1-基础-表达式、函数、匿名函数、Partial application、柯里化、traits、类型

因为Kafka是用Scala写的,为了方便学习Scala语法,此处把Twitter官方的Scala课堂转载到此处。 (原文位于http://twitter.github.io/scala_schoo...

Scalaz(7)- typeclass:Applicative-idomatic function application

Applicative,正如它的名称所示,就是FP模式的函数施用(function application)。我们在前面的讨论中不断提到FP模式的操作一般都在管道里进行的,因为FP的变量表达形式是这样...

Interview Q&A - Write a C# console application to implement a string replacement function

Requirements Given three strings: input, oldValue and newValue. Look for oldValue in input and repl...
  • chimomo
  • chimomo
  • 2015年03月24日 10:57
  • 884

【GPU编程】体绘制传输函数-分类(Volume Rendering Transfer function:Pre- VS Post-Classification)

在科学可视化中,我们所获得的体数据集经常是代表一些光学上的不同物理属性的单值。通常没有可行的方法可以从这样的数据中获得发射和吸收属性。因此用户必须采用某种映射方法给数据值分配光学属性值来决定数据中的不...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:currying vs partial function application
举报原因:
原因补充:

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