Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 是否有相当于部分应用程序的返回值?_C#_Clojure_Functional Programming_Naming_Partial Application - Fatal编程技术网

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

如果papply返回的函数的算术性小于输入函数,是否存在类似的FP操作,该操作返回的函数返回的值与输入函数的值无关?如果是,是否存在C#等价物

考虑一个C#函数,它返回要转换为表达式的
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; }
}