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, Folde Tableem 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 Mapfunção usa dois parâmetros: fe listonde fé uma função e listé uma lista de valores. Ele deve retornar o faplicado 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 Nestfunção usa três parâmetros, bem como: f, arg, timesonde fé uma função, argé o seu argumento inicial, e timesé quantas vezes a função é aplicada. Deve retornar uma expressão com tempos faplicados timespara 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 Applyfunção usa dois parâmetros: fe argsonde fé uma função e argsuma lista. Deve aplicar f- se ao args. Assim sendo:
Apply(f, {a,b,c})
retorna
f(a,b,c)
Alcance
A Rangefunção pega um número inteiro re gera os números inteiros até esse número. Assim sendo:
Range(5)
retorna
{ 1, 2, 3, 4, 5}
Dobra
A Foldfunção usa três parâmetros f, arg, othersonde fé uma função, argé um parâmetro simples, e othersuma 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 fe um parâmetro chamado iteratorno formato: {iMin, iMax}where iMine iMaxsão números inteiros. Você deve aplicar fno 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!!!
Tablefunciona aqui. Seu exemplo deveria serTable(f, {x, 0, 5})? Também não entendo o objetivox, pois apenas aplica a função ao intervalo.