Ihr Unternehmen ist gerade dabei, ein Projekt zu starten, und Sie haben sich zum ersten Mal dafür entschieden, einen funktionalen Programmcode zu verwenden. Ihr Chef ist jedoch sehr zurückhaltend und möchte keine eingebauten Funktionen verwenden. Sie müssen die Hauptfunktionen selbst implementieren. Insbesondere müssen Sie die Funktionen schreiben: Map, Nest, Apply, Range, Foldund Tablein einer Sprache auf Ihrer Wahl. Der Chef ist sehr beschäftigt und möchte die Programme so kurz wie möglich halten, damit er keine Zeit mit Lesen verschwendet. Er möchte auch, dass Sie keine Schleifen verwenden. Daher wird die Anzahl der Bytes um 10% reduziert, wenn Sie keine Schleifen verwenden.
Die detaillierten Anforderungen der Funktionen sind nachfolgend aufgeführt:
Karte
Die MapFunktion akzeptiert zwei Parameter: fund listwo fist eine Funktion und listist eine Liste von Werten. Es sollte das fauf jedes Element angewendete von zurückgeben list. Daher wird es als solches funktionieren:
Map(f,{a,b,c})
kehrt zurück
{ f(a), f(b), f(c) }
und
Map(f, {{a,b},{b,c}})
kehrt zurück
{ f({a,b}), f({b,c})}
Nest
Die NestFunktion nimmt drei Parameter als auch: f, arg, timeswobei feine Funktion ist, argist sein Ausgangsargument, und timesist , wie oft die Funktion angewandt wird. Es sollte einen Ausdruck mit fangewendeten timesZeiten an zurückgeben arg. Daher wird es als solches funktionieren:
Nest(f, x, 3)
kehrt zurück
f(f(f(x)))
und
Nest(f, {a,b}, 3)
kehrt zurück
f(f(f({a,b})))
Sich bewerben
Die ApplyFunktion akzeptiert zwei Parameter: fund argswo fist eine Funktion und argseine Liste. Es sollte gelten , fum die args. Deshalb:
Apply(f, {a,b,c})
kehrt zurück
f(a,b,c)
Reichweite
Die RangeFunktion nimmt eine ganze Zahl rund gibt die ganzen Zahlen bis zu dieser Zahl aus. Deshalb:
Range(5)
kehrt zurück
{ 1, 2, 3, 4, 5}
Falten
Die FoldFunktion nimmt drei Parameter f, arg, otherswo feine Funktion ist, argist einfach Parameter und otherseine Liste. Es wird so funktionieren:
Fold(f, x, {a, b, c, d})
kehrt zurück
f(f(f(f(x,a),b),c),d)
Tabelle
Die Tabellenfunktionen sollten eine Funktion fund einen Parameter enthalten, die iteratorin der folgenden Form aufgerufen werden: {iMin, iMax}where iMinund iMaxare integer. Sie sollten sich finnerhalb des angegebenen Bereichs bewerben . Deshalb:
Table(f, {0, 5})
kehrt zurück
{f(0), f(1), f(2), f(3), f(4), f(5)}
Ich habe die Definition dieser Funktionen von der Seite zur funktionalen Programmierung in Mathematica übernommen. Gehen Sie also dorthin, wenn Sie weitere Anleitungen benötigen. Beachten Sie, dass Sie nicht alle auf dieser Seite gezeigten Funktionen implementieren müssen, sondern nur die in diesem Beitrag beschriebenen.
Standard-Regelungslücken sind wie gewohnt unzulässig.
Falls Ihre Sprache nicht zulässt, dass Funktionen als Argumente übergeben werden, müssen Sie diese Funktion implementieren und in Ihre Antwort einfügen. Die Byteanzahl dieser Operation wird jedoch nicht zur Gesamtsumme addiert.
Dies ist Codegolf, also gewinnt der kürzeste Code. Viel Glück!!!
Tabledas hier funktioniert. Soll Ihr Beispiel seinTable(f, {x, 0, 5})? Ich verstehe auch überhaupt nicht den Zweckx, da es nur die Funktion auf den Bereich anwendet.