La tua azienda ha appena iniziato un progetto e per la prima volta hai deciso di utilizzare uno stile di programmazione funzionale in stile codice. Tuttavia il tuo capo è molto diffidente e non vuole usare le funzioni integrate e richiede di implementare te stesso le funzioni principali. In particolare è necessario scrivere le funzioni: Map, Nest, Apply, Range, Folde Tablein una lingua a vostra scelta. Il capo è un uomo molto impegnato e vuole avere i programmi il più breve possibile, quindi non perde tempo a leggere. Inoltre, non vorrebbe che tu utilizzassi i loop, quindi avrai una riduzione del 10% sul conteggio dei byte per non usare i loop.
I requisiti dettagliati delle funzioni sono di seguito:
Carta geografica
La Mapfunzione accetta due parametri: fe listdove fè una funzione ed listè un elenco di valori. Dovrebbe restituire l' fapplicazione applicata a ciascun elemento di list. Pertanto funzionerà come tale:
Map(f,{a,b,c})
ritorna
{ f(a), f(b), f(c) }
e
Map(f, {{a,b},{b,c}})
ritorna
{ f({a,b}), f({b,c})}
Nido
La Nestfunzione accetta tre parametri vedere: f, arg, timesdove fè una funzione, argè la sua tesi di partenza, ed timesè quante volte viene applicata la funzione. Dovrebbe restituire un'espressione con tempi fapplicati timesa arg. Pertanto funzionerà come tale:
Nest(f, x, 3)
ritorna
f(f(f(x)))
e
Nest(f, {a,b}, 3)
ritorna
f(f(f({a,b})))
Applicare
La Applyfunzione accetta due parametri: fe argsdov'è funa funzione e argsun elenco. Dovrebbe applicarsi fal args. Perciò:
Apply(f, {a,b,c})
ritorna
f(a,b,c)
Gamma
La Rangefunzione accetta un numero intero re genera numeri interi fino a quel numero. Perciò:
Range(5)
ritorna
{ 1, 2, 3, 4, 5}
piega
La Foldfunzione prende tre parametri f, arg, othersdove fè una funzione, argè semplice parametro, e othersun elenco. Funzionerà come tale:
Fold(f, x, {a, b, c, d})
ritorna
f(f(f(f(x,a),b),c),d)
tavolo
Le funzioni della tabella dovrebbero assumere una funzione fe un parametro chiamato iteratornel formato: {iMin, iMax}dove iMine iMaxsono numeri interi. È necessario applicare foltre l'intervallo specificato. Perciò:
Table(f, {0, 5})
ritorna
{f(0), f(1), f(2), f(3), f(4), f(5)}
Ho usato la definizione di queste funzioni dalla pagina di programmazione funzionale di Mathematica , quindi vai lì se hai bisogno di ulteriori indicazioni. Nota che non dovrai implementare tutte le versioni delle funzioni mostrate in quella pagina, ma solo quelle scritte in questo post.
Le scappatoie standard non sono consentite come al solito.
Nel caso in cui la tua lingua non consenta il passaggio di funzioni come argomenti, devi implementare questa funzionalità e aggiungerla alla tua risposta. Tuttavia, il conteggio dei byte di questa operazione non verrà aggiunto al totale.
Questo è il codice golf, quindi vince il codice più corto. In bocca al lupo!!!
Tablefunzioni qui. Il tuo esempio dovrebbe essereTable(f, {x, 0, 5})? Inoltre non capisco affatto lo scopox, poiché applica solo la funzione all'intervallo.