関数型プログラミングパラダイムを実装する
あなたの会社はプロジェクトを始めたばかりで、初めて関数型プログラミングコードスタイルを使用することに決めました。しかし、上司は本当に気が進まないため、組み込み関数を使用したくないため、メイン関数を自分で実装する必要があります。特に、あなたは関数を記述する必要があります:Map、Nest、Apply、Range、FoldとTableお好みの言語で。上司は本当に忙しいので、プログラムをできるだけ短くしたいので、読書に時間を浪費しません。彼はまた、ループを使用しないことを望んでいるため、ループを使用しない場合のバイトカウントが10%削減されます。 機能の詳細な要件は以下のとおりです。 地図 Mapこの関数は2つのパラメータを取りますfし、listどこf関数であり、list値のリストです。のf各要素に適用されたを返す必要がありlistます。したがって、次のように機能します。 Map(f,{a,b,c}) 返す { f(a), f(b), f(c) } そして Map(f, {{a,b},{b,c}}) 返す { f({a,b}), f({b,c})} ネスト Nest機能は同様に3つのパラメータを取ります:f、arg、timesどこf機能があり、argその開始引数で、times関数が適用される回数です。にf適用されたtimes時間を含む式を返す必要がありargます。したがって、次のように機能します。 Nest(f, x, 3) 返す f(f(f(x))) そして Nest(f, {a,b}, 3) 返す f(f(f({a,b}))) 適用する Applyこの関数は2つのパラメータを取りますfし、argsどこfの機能とあるargsリスト。に適用fする必要がありますargs。したがって: Apply(f, {a,b,c}) 返す f(a,b,c) 範囲 このRange関数は1つの整数rを取り、その数までの整数を出力します。したがって: Range(5) 返す { 1, 2, 3, 4, 5} 折ります Foldこの関数は3つのパラメータを取りf、arg、othersどこfの関数である、arg簡単なパラメータ、及びあるothersリスト。以下のように機能します: Fold(f, …