Sua empresa está apenas começando um projeto e, pela primeira vez, você decidiu usar um estilo de código de programação funcional. No entanto, seu chefe é realmente indiferente e não deseja usar funções internas e requer que você implemente as funções principais. Em particular, você precisa escrever as funções: Map
, Nest
, Apply
, Range
, Fold
e Table
em uma língua da sua escolha. O chefe é um homem muito ocupado, e ele quer ter os programas o mais curto possível, para não perder tempo lendo. Ele também gostaria que você não usasse loops, portanto, você terá uma redução de 10% na contagem de bytes por não usar loops.
Os requisitos detalhados das funções estão abaixo:
Mapa
A Map
função usa dois parâmetros: f
e list
onde f
é uma função e list
é uma lista de valores. Ele deve retornar o f
aplicado a cada elemento de list
. Portanto, ele funcionará como tal:
Map(f,{a,b,c})
retorna
{ f(a), f(b), f(c) }
e
Map(f, {{a,b},{b,c}})
retorna
{ f({a,b}), f({b,c})}
Ninho
A Nest
função usa três parâmetros, bem como: f
, arg
, times
onde f
é uma função, arg
é o seu argumento inicial, e times
é quantas vezes a função é aplicada. Deve retornar uma expressão com tempos f
aplicados times
para arg
. Portanto, ele funcionará como tal:
Nest(f, x, 3)
retorna
f(f(f(x)))
e
Nest(f, {a,b}, 3)
retorna
f(f(f({a,b})))
Aplique
A Apply
função usa dois parâmetros: f
e args
onde f
é uma função e args
uma lista. Deve aplicar f
- se ao args
. Assim sendo:
Apply(f, {a,b,c})
retorna
f(a,b,c)
Alcance
A Range
função pega um número inteiro r
e gera os números inteiros até esse número. Assim sendo:
Range(5)
retorna
{ 1, 2, 3, 4, 5}
Dobra
A Fold
função usa três parâmetros f
, arg
, others
onde f
é uma função, arg
é um parâmetro simples, e others
uma lista. Funcionará assim:
Fold(f, x, {a, b, c, d})
retorna
f(f(f(f(x,a),b),c),d)
Tabela
As funções da tabela devem ter uma função f
e um parâmetro chamado iterator
no formato: {iMin, iMax}
where iMin
e iMax
são números inteiros. Você deve aplicar f
no intervalo especificado. Assim sendo:
Table(f, {0, 5})
retorna
{f(0), f(1), f(2), f(3), f(4), f(5)}
Eu usei a definição dessas funções na página de programação funcional do Mathematica ; portanto, vá para lá se precisar de mais orientações. Observe que você não precisará implementar toda a versão das funções mostradas nessa página, mas apenas as escritas nesta postagem.
As brechas padrão não são permitidas como de costume.
Caso seu idioma não permita que funções sejam passadas como argumentos, você precisará implementar esse recurso e adicioná-lo à sua resposta. No entanto, a contagem de bytes desta operação não será adicionada ao total.
Este é o código de golfe, portanto o código mais curto vence. Boa sorte!!!
Table
funciona aqui. Seu exemplo deveria serTable(f, {x, 0, 5})
? Também não entendo o objetivox
, pois apenas aplica a função ao intervalo.