jjzjj

Currying

全部标签

c# - (如何)是否可以绑定(bind)/重新绑定(bind)一个方法来与不同签名的委托(delegate)一起工作?

我是一名C++开发人员,在C++中使用过信号和槽,这对我来说似乎类似于C#中的委托(delegate)。我发现自己在寻找“绑定(bind)”提供的功能时不知所措,觉得我一定遗漏了一些东西。我觉得像下面这样的东西,在c++中是可能的,在带有委托(delegate)的c#中应该是可能的。这是我在C++中所做的一些伪代码:SlotsomeCallback;intfoo(inti){std::coutsomeCallback=bind(fun_ptr(foo),i);++i;//addedtoshowthatlateevaluationwouldbeanon-trivialdifference

C# Linq 与柯里化(Currying)

我正在研究函数式编程及其各种概念。所有这些东西都很有趣。我已经多次阅读有关Currying及其优势的文章。但我不明白这一点。以下源代码演示了curry概念的使用和linq的解决方案。实际上,我没有看到使用柯里化(Currying)概念的任何优势。那么,使用柯里化(Currying)有什么好处呢?staticboolIsPrime(intvalue){intmax=(value/2)+1;for(inti=2;i,IEnumerable>GetPrimes=HigherOrder.GetFilter().Curry()(IsPrime);staticvoidMain(string[]ar

c# - C# 中的 Currying 有什么优势? (实现部分功能)

C#中的Currying有什么优势?在柯里化(Currying)函数上实现部分函数应用有什么好处? 最佳答案 如果您的问题是如何在C#中实现柯里化(Currying),这里有一个示例publicFunc>Curry(Funcfunc){returnp1=>p2=>func(p1,p2);}柯里化(Currying)可以用任何支持闭包(lambdas)的语言来实现,并且对于部分函数应用很有用,比如在UI编程中,在这种情况下,执行函数所需的所有输入都没有收到,所以柯里化(Currying)函数已经传递了接收到其中捕获的输入。

javascript - Function.bind.bind(Function.call) 如何取消柯里化(Currying)?

我的代码库中有这一行:varuncurryThis=Function.bind.bind(Function.call);我正在努力解决这个问题。据推测,它是uncurries。我该如何解决这个问题?我猜这是Function.bind的一个版本,它自己的this绑定(bind)到Function.call。对我的帮助还不够。而且我还没有发现任何用途,所以我什至不确定您是将其独立调用还是需要将其“作为一种方法”调用,只是,您知道,先绑定(bind)它。 最佳答案 它将call函数传递给bind函数,bind函数本身就是this的值>。因

javascript - 'currying' 和 'composition' 在 Javascript 中是同一个概念吗?

最近我在一本Javascript书中读到了函数组合,然后在一个网站上我看到有人将其称为柯里化(Currying)。它们是同一个概念吗? 最佳答案 @Omarjmh的回答很好,但在我看来,撰写示例对于学习者来说非常复杂Aretheythesameconcept?没有。首先,柯里化(Currying)是将一个接受多个参数的函数转换为一系列函数,每个函数接受一个参数。//notcurriedconstadd=(x,y)=>x+y;add(2,3);//=>5//curriedconstadd=x=>y=>x+y;add(2)(3);//=

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

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

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)只提供其中一个