C# 是否有相当于部分应用程序的返回值?
如果papply返回的函数的算术性小于输入函数,是否存在类似的FP操作,该操作返回的函数返回的值与输入函数的值无关?如果是,是否存在C#等价物 考虑一个C#函数,它返回要转换为表达式的C# 是否有相当于部分应用程序的返回值?,c#,clojure,functional-programming,naming,partial-application,C#,Clojure,Functional Programming,Naming,Partial Application,如果papply返回的函数的算术性小于输入函数,是否存在类似的FP操作,该操作返回的函数返回的值与输入函数的值无关?如果是,是否存在C#等价物 考虑一个C#函数,它返回要转换为表达式的void,您已经多次这样做了,编写了一个匿名函数包装器,如(args)=>f(args);返回null 在C#中 在函数式编程中,您可能会使用函数组合来扩充或修改结果。例如,您只需将现有函数与常量函数组合,例如给定的f: val f' = const 0 o f 其中,o是函数组合(就像数学中的一样),而cons
void
,您已经多次这样做了,编写了一个匿名函数包装器,如(args)=>f(args);返回null代码>
在C#中
在函数式编程中,您可能会使用函数组合来扩充或修改结果。例如,您只需将现有函数与常量函数组合,例如给定的f
:
val f' = const 0 o f
其中,o
是函数组合(就像数学中的一样),而const 0
创建一个始终返回0的常量函数(对于任何参数)。这些是标准组合符,您可以定义如下:
fun (g o f) x = g (f x)
fun const x y = x
您可以编写一个方法来为您创建匿名函数
public Action<T> Ignore<T,TResult>(Func<T,TResult> func)
{
return (args) => { func(args); return; }
}
公共操作忽略(Func Func)
{
return(args)=>{func(args);return;}
}
虽然您的代码在技术上返回args,但是args的格式如下
public Func<T,T> Ignore<T,TResult>(Func<T,TResult> func)
{
return (args) => { func(args); return args; }
}
public Func忽略(Func Func)
{
return(args)=>{func(args);return args;}
}
在这两种情况下,您都可以将其传递到另一个方法,如
方法(忽略(DoSomething))代码>或者你自己可以这样称呼它忽略(DoSomething)(1)代码> 如果必要的话,如果我知道如何命名,我愿意写一个方法。@davidzarlengo:你写的方法似乎有效,你只需要为每一个arrity写一次就可以了。(泛型不能支持可变数量的输入)我最后只编写了另一个返回null的匿名lambda。我认为C#的表达能力不足以消除这种重复。函数组合似乎走上了正确的轨道。你知道有没有一种方法可以在C#内置到标准库中#中设置它吗?@davidzarlengo:C#中唯一的功能与LINQ相关,因此很少有标准方法可用。如果你想在.NET中寻找一种专为函数式编程设计的语言,F#有很多。
public Action<T> Ignore<T,TResult>(Func<T,TResult> func)
{
return (args) => { func(args); return; }
}
public Func<T,T> Ignore<T,TResult>(Func<T,TResult> func)
{
return (args) => { func(args); return args; }
}