jjzjj

currying

全部标签

javascript - CoffeeScript 中的 n 元 curry

我在玩CoffeeScript时发现自己写了以下几行,然后敬畏地看着它们:compose=(f,g)->(x)->fgxcurry=(f)->(x)->(y)->f(x,y)uncurry=(f)->(x,y)->(fx)y多好,我想!现在,作为练习,我想将curry和uncurry函数泛化为n个参数,以获得类似于此的内容:curry2=(f)->(x)->(y)->f(x,y)curry3=(f)->(x)->(y)->(z)->f(x,y,z)curry4=(f)->(x)->(y)->(z)->(t)->f(x,y,z,t)对于uncurry也是一样的:uncurry2=(f)-

java - 滥用泛型在 Java 中实现柯里化(Currying)组合函数

因此,在稍微接触了Java泛型之后,为了更深入地了解它们的功能,我决定尝试实现函数式程序员熟悉的组合函数的柯里化(Currying)版本。Compose具有类型(在函数式语言中)(b->c)->(a->b)->(a->c)。执行柯里化(Currying)算术函数并不太难,因为它们只是多态的,但compose是一个高阶函数,事实证明它对我理解Java中的泛型很费力。这是我目前创建的实现:publicclassCurrying{publicstaticvoidmain(String[]argv){//BasicusageofcurryingSystem.out.println(add().

java - 代码在 Eclipse 中编译但不是 javac : curried lambdas with functional subinterface. 哪个是正确的?

我在Eclipse中开发了一些代码,测试成功,将其推送到我们的JenkinsCI服务器,并收到一封电子邮件,说Maven因Java编译错误而窒息。我随后隔离了问题并创建了以下显示问题的最小示例:importjava.util.List;importjava.util.function.Function;classMinimalTypeFailureExample{publicstaticvoidmain(String[]args){ListoriginalList=null;//irrelevantListresultList=transform(originalList,outer-

java - 带参数的方法引用

我正在寻找一种将制表符分隔的字符串映射到数组的方法。目前,我正在使用lambda表达式来执行此操作:stream.map(line->line.split("\t"));有没有办法通过方法引用来做到这一点?我知道stream.map(String::split("\t"))不起作用,但我想知道是否有其他选择。 最佳答案 你可以这样做:staticFunctioncurry(BiFunctionf,Uu){returnt->f.apply(t,u);}然后你就可以做到:stream.map(curry(String::split,"\

java - 收集参数以应用于 Java/Scala 中的柯里化(Currying)函数

我想在Java8中创建一个类,它能够递归地创建一个对象,该对象具有一个根据我添加的参数采用函数参数的方法。例如,我希望能够这样做:newX().param(23).param("someString").param(someObject).apply((Integera)->(Stringb)->(Objectc)->f(a,b,c))然后apply方法会将收集到的参数应用到给定的函数。我觉得这应该可以在保持类型安全的同时无需反射(reflection),但我不太清楚如何做到这一点。如果我可以将其转换为Java8,也欢迎使用Scala中的解决方案。如果不可能,我也会接受解释原因的答案。

如何声明 Currying 函数的类型?

Challenge在本次挑战中,您需要为 Currying 函数声明相应的类型,以帮助TypeScript编译器推断出正确的类型。declarefunctionCurrying(fn:any):anyconstcurried1=Currying((a:string,b:number,c:boolean)=>true)constcurried2=Currying((a:string,b:number,c:boolean,d:boolean,e:boolean,f:string,g:boolean)=>true)constcurried3=Currying(()=>true)typecases=[

c++ - 柯里化(Currying)函数的惰性类型推断

在下面的例子中,调用mkPair2的类型推断失败了:#includetemplatestructPair{Aleft;Bright;};templatePairmkPair1(Aleft,Bright){return(Pair){left,right};}templatestd::function(B)>mkPair2(Aleft){return[left](Bright){return(Pair){left,right};};}Pairex1=mkPair1(2,'a');Pairex2=mkPair2(2)('a');问题是mkPair2有两个模板参数,但是调用(2)只提供其中一个

c++ - 返回捕获局部变量的 lambda

今天我在C++11lambda中遇到了一个非常不直观的行为(至少对我而言)。有问题的代码如下:#includeautosum(intx){return[&x](inty){returnx+y;};}intmain(){inta=sum(2)(3);printf("%d\n",a);}这不是打印5,而是乱码。实际上,至少在我的GCC版本中,如果我打开-O2优化标志,它实际上会打印5。由于输出取决于编译器的优化级别,因此它是未定义的行为。过了一会儿,我想我明白发生了什么。当函数sum被调用时,参数x对应的一个栈变量被设置为2,然后函数sum返回,这个栈变量可能会被编译器需要放在那里的任何东

c++ - 函数调用中多于一个圆括号?

我有一个练习需要编写一个函数。功能方案看起来像autoadd(inta){}我需要能够使用多个括号调用此函数:add(1)(2)(3);//6add(1)(2)(3)(4);//10add(1)(2)(3)(4)(5);//15但我不知道在这种情况下应该使用哪个C++功能。我听说我应该使用仿函数,但我不知道在这种情况下这是否是最好的主意。 最佳答案 您可以通过让add返回一个functor来做到这一点,即实现operator()的对象。您可以编写一个模板化版本,让编译器推断类型。试一试here.templatestructadder

c++ - 使用来自另一个模板的参数对模板进行柯里化(Currying)

我有类Foo,它有两个模板参数,A和B:templatestructFoo{};我还有类Base,它有一个模板模板参数:templatetypenameFoo>structBase{};我想编写类Derived假设如下:Derived有一个模板参数(A)DerivedextendsclassBaseDerived作为模板参数传递给类Base类Foo,但带有一个参数“currying”(A)我该怎么做?这是我的(notworking)解决方案:templatetypenameFoo>structBase{};templatestructFoo{};templatetypenameFoo,