あなたの会社はプロジェクトを始めたばかりで、初めて関数型プログラミングコードスタイルを使用することに決めました。しかし、上司は本当に気が進まないため、組み込み関数を使用したくないため、メイン関数を自分で実装する必要があります。特に、あなたは関数を記述する必要があります: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
、関数を範囲に適用するだけなので、目的もまったくわかりません。