あなたの会社はプロジェクトを始めたばかりで、初めて関数型プログラミングコードスタイルを使用することに決めました。しかし、上司は本当に気が進まないため、組み込み関数を使用したくないため、メイン関数を自分で実装する必要があります。特に、あなたは関数を記述する必要があります: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, x, {a, b, c, d})
返す
f(f(f(f(x,a),b),c),d)
表
表関数は、function f、および次iteratorの形式で呼び出されるパラメーターを取る必要{iMin, iMax}がiMinありiMaxます。where およびは整数です。f指定した範囲で適用する必要があります。したがって:
Table(f, {0, 5})
返す
{f(0), f(1), f(2), f(3), f(4), f(5)}
これらの関数の定義はMathematica関数プログラミングページから使用したので、さらにガイダンスが必要な場合はそこに進んでください。そのページに示されている関数のすべてのバージョンを実装する必要はなく、この投稿に書かれているものだけを実装する必要があることに注意してください。
通常の標準的な抜け穴は禁止されています。
言語が関数を引数として渡すことを許可していない場合、この機能を実装し、回答に追加する必要があります。ただし、この操作のバイトカウントは合計に追加されません。
これはコードゴルフなので、最短のコードが勝ちます。がんばろう!!!
Tableここでどのように機能するかはわかりません。あなたの例はあるはずTable(f, {x, 0, 5})ですか?またx、関数を範囲に適用するだけなので、目的もまったくわかりません。