加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

需要帮助理解使用groovy关闭的currying?

发布时间:2020-12-14 16:35:06 所属栏目:大数据 来源:网络整理
导读:我正在努力理解函数式编程中的工作原理.我已经经历了 wiki和几个关于同样的问题. Need help understanding lambda (currying) What is ‘Currying’? 我明白,currying是关于将一??个函数分成n个参数到n个或更少的函数,每个函数有一个参数.理论上理解它,但是
我正在努力理解函数式编程中的工作原理.我已经经历了 wiki和几个关于同样的问题.

Need help understanding lambda (currying)

What is ‘Currying’?

我明白,currying是关于将一??个函数分成n个参数到n个或更少的函数,每个函数有一个参数.理论上理解它,但是我编码的时候不能连接点.也许是我在功能编程语言或C#中缺乏知识(上述问题中的许多答案都是这样).

无论如何,我理解groovy& java的.所以我试图在groovy中获得标准的add(a,b)函数的大纲,但是我无法完成它.

def closure = { arg ->
   // ??
}

def add(anotherClosure,a){
    return closure // ??
}

有人可以帮我理解使用groovy关闭的currying吗?

解决方法

您可以通过编写一个封闭来滚动自己的currying功能,该闭包可以使用另一个闭包和curried参数进行设置,并返回一个使用该值的闭包.

// Our closure that takes 2 parameters and returns a String
def greet = { greeting,person -> "$greeting $person" }

// This takes a closure and a default parameter
// And returns another closure that only requires the
// missing parameter
def currier = { fn,param ->
  { person -> fn( param,person ) }
}

// We can then call our currying closure
def hi = currier( greet,'Hi' )

// And test it out
hi( 'Vamsi' )

但是你最好坚持使用内置的Groovy咖喱法as shown by jalopaba.(还有rcurry和ncurry,分别从右边和给定的位置咖喱)

应该说,Groovy咖喱法是一个误称,因为它更像是partial application的情况,因为你不需要关闭只需要一个参数,即:

def addAndTimes = { a,b,c -> ( a + b ) * c }

println addAndTimes( 1,2,3 ) // 9

def partial = addAndTimes.curry( 1 )

println partial( 2,3 ) // 9

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读