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
, Fold
y Table
en 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 Map
función toma dos parámetros: f
y list
where f
es una función y list
es una lista de valores. Debe devolver el f
aplicado 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 Nest
función toma tres parámetros, así: f
, arg
, times
donde f
es una función, arg
es su argumento de partida, y times
es cuántas veces se aplica la función. Debería devolver una expresión con tiempos f
aplicados times
a 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 Apply
función toma dos parámetros: f
y args
dónde f
es una función y args
una lista. Debería aplicarse f
a la args
. Por lo tanto:
Apply(f, {a,b,c})
devoluciones
f(a,b,c)
Distancia
La Range
función toma un entero r
y genera los enteros hasta ese número. Por lo tanto:
Range(5)
devoluciones
{ 1, 2, 3, 4, 5}
Doblez
La Fold
función toma tres parámetros f
, arg
, others
donde f
es una función, arg
es un parámetro simple, y others
una 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 f
y un parámetro llamado iterator
en la forma: {iMin, iMax}
donde iMin
y iMax
son enteros. Debe aplicar f
sobre 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!!!
Table
funciona 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.