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
, Fold
e Table
in 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 Map
funzione accetta due parametri: f
e list
dove f
è una funzione ed list
è un elenco di valori. Dovrebbe restituire l' f
applicazione 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 Nest
funzione accetta tre parametri vedere: f
, arg
, times
dove f
è una funzione, arg
è la sua tesi di partenza, ed times
è quante volte viene applicata la funzione. Dovrebbe restituire un'espressione con tempi f
applicati times
a 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 Apply
funzione accetta due parametri: f
e args
dov'è f
una funzione e args
un elenco. Dovrebbe applicarsi f
al args
. Perciò:
Apply(f, {a,b,c})
ritorna
f(a,b,c)
Gamma
La Range
funzione accetta un numero intero r
e genera numeri interi fino a quel numero. Perciò:
Range(5)
ritorna
{ 1, 2, 3, 4, 5}
piega
La Fold
funzione prende tre parametri f
, arg
, others
dove f
è una funzione, arg
è semplice parametro, e others
un 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 f
e un parametro chiamato iterator
nel formato: {iMin, iMax}
dove iMin
e iMax
sono numeri interi. È necessario applicare f
oltre 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!!!
Table
funzioni qui. Il tuo esempio dovrebbe essereTable(f, {x, 0, 5})
? Inoltre non capisco affatto lo scopox
, poiché applica solo la funzione all'intervallo.