1

papplyが入力関数よりもアリティの低い関数を返す場合、入力関数の値に関係なく値を返す関数を返す同様のFP操作はありますか?もしそうなら、C#に相当するものはありますか?

void式に変換したいものを返すC#関数について考えてみます。これは、のような無名関数ラッパーを作成することで何度も行ってきました(args) => f(args); return null;

C#では、

public Func<T1, T2, ..., T8, TResult> WhatIsMyName<T1, T2, ..., T8, TResult> (Action<T1, T2, ..., T8> action, TResult value = default(TResult))
{
    return (t) => { action(t); return value; }
}

これは理想的には「いいね」と呼ぶFP.WhatIsMyName(voidfunc)ので、キャストする必要はありません。

Clojureでは、

(defn whatismyname? [f x] 
  (f)
  x)
4

2 に答える 2

2

関数型プログラミングでは、おそらく関数合成を使用して結果を拡張または変更します。あなたの例では、既存の関数を定数で構成するだけですf

val f' = const 0 o f

ここで、oは関数の合成(数学のように)でありconst 0、常に0を返す定数関数を作成します(任意の引数に対して)。これらは標準のコンビネータであり、次のように定義できます。

fun (g o f) x = g (f x)
fun const x y = x
于 2012-03-21T17:41:39.823 に答える
1

匿名関数を作成するメソッドを作成できます。

public Action<T> Ignore<T,TResult>(Func<T,TResult> func)
{
    return (args) => { func(args); return; }
}

コードは技術的にargsを返しますが、これは次の形式になります。

public Func<T,T> Ignore<T,TResult>(Func<T,TResult> func)
{
    return (args) => { func(args); return args; }
}

どちらの場合でも、このような別のメソッドに渡すか、このMethod(Ignore(DoSomething));ように自分で呼び出すことができますIgnore(DoSomething)(1);

于 2012-03-21T17:42:08.050 に答える