Su empresa recién está comenzando un proyecto, y por primera vez decidió usar un estilo de código de programación funcional. Sin embargo, su jefe es muy inseguro y no quiere usar funciones integradas, y requiere que implemente las funciones principales. En particular, es necesario escribir las funciones: Map, Nest, Apply, Range, Foldy Tableen un idioma de su elección. El jefe es un hombre muy ocupado, y quiere tener los programas lo más cortos posible, para no perder el tiempo leyendo. También le gustaría que no use bucles, por lo tanto, tendrá una reducción del 10% en el recuento de bytes por no usar bucles.
Los requisitos detallados de las funciones están a continuación:
Mapa
La Mapfunción toma dos parámetros: fy listwhere fes una función y listes una lista de valores. Debe devolver el faplicado a cada elemento de list. Por lo tanto, funcionará como tal:
Map(f,{a,b,c})
devoluciones
{ f(a), f(b), f(c) }
y
Map(f, {{a,b},{b,c}})
devoluciones
{ f({a,b}), f({b,c})}
Nido
La Nestfunción toma tres parámetros, así: f, arg, timesdonde fes una función, arges su argumento de partida, y timeses cuántas veces se aplica la función. Debería devolver una expresión con tiempos faplicados timesa arg. Por lo tanto, funcionará como tal:
Nest(f, x, 3)
devoluciones
f(f(f(x)))
y
Nest(f, {a,b}, 3)
devoluciones
f(f(f({a,b})))
Aplicar
La Applyfunción toma dos parámetros: fy argsdónde fes una función y argsuna lista. Debería aplicarse fa la args. Por lo tanto:
Apply(f, {a,b,c})
devoluciones
f(a,b,c)
Distancia
La Rangefunción toma un entero ry genera los enteros hasta ese número. Por lo tanto:
Range(5)
devoluciones
{ 1, 2, 3, 4, 5}
Doblez
La Foldfunción toma tres parámetros f, arg, othersdonde fes una función, arges un parámetro simple, y othersuna lista. Funcionará como tal:
Fold(f, x, {a, b, c, d})
devoluciones
f(f(f(f(x,a),b),c),d)
Mesa
Las funciones de la tabla deben tomar una función fy un parámetro llamado iteratoren la forma: {iMin, iMax}donde iMiny iMaxson enteros. Debe aplicar fsobre el rango especificado. Por lo tanto:
Table(f, {0, 5})
devoluciones
{f(0), f(1), f(2), f(3), f(4), f(5)}
He usado la definición de estas funciones de la página de programación funcional de Mathematica , así que dirígete allí si necesitas más orientación. Tenga en cuenta que no necesitará implementar todas las versiones de las funciones que se muestran en esa página, sino solo aquellas escritas en esta publicación.
Las lagunas estándar no se permiten como de costumbre.
En caso de que su lenguaje no permita que las funciones se pasen como argumentos, debe implementar esta capacidad y agregarla a su respuesta. Sin embargo, el recuento de bytes de esta operación no se agregará al total.
Este es el código de golf, por lo que gana el código más corto. ¡¡¡Buena suerte!!!
Tablefunciona aquí. ¿Se supone que es tu ejemploTable(f, {x, 0, 5})? Tampoco entiendo el propósitox, ya que solo aplica la función al rango.