Votre entreprise ne fait que commencer un projet, et pour la première fois vous avez décidé d'utiliser un style de code de programmation fonctionnel. Cependant, votre patron est vraiment méfiant et ne veut pas utiliser les fonctions intégrées, et vous oblige à implémenter vous-même les fonctions principales. En particulier , vous devez écrire les fonctions: Map
, Nest
, Apply
, Range
, Fold
et Table
dans une langue de votre choix. Le patron est un homme très occupé, et il veut que les programmes soient aussi courts que possible, donc il ne perd pas de temps à lire. Il aimerait également que vous n'utilisiez pas de boucles, donc vous aurez une réduction de 10% sur le nombre d'octets pour ne pas utiliser de boucles.
Les exigences détaillées des fonctions sont ci-dessous:
Carte
La Map
fonction prend deux paramètres: f
et list
où f
est une fonction et list
est une liste de valeurs. Il doit renvoyer l' f
appliqué à chaque élément de list
. Par conséquent, cela fonctionnera comme tel:
Map(f,{a,b,c})
Retour
{ f(a), f(b), f(c) }
et
Map(f, {{a,b},{b,c}})
Retour
{ f({a,b}), f({b,c})}
Nid
La Nest
fonction prend trois paramètres ainsi: f
, arg
, times
où f
est une fonction, arg
est son argument de départ, et times
est combien de fois la fonction est appliquée. Il doit renvoyer une expression avec f
des times
temps appliqués à arg
. Par conséquent, cela fonctionnera comme tel:
Nest(f, x, 3)
Retour
f(f(f(x)))
et
Nest(f, {a,b}, 3)
Retour
f(f(f({a,b})))
Appliquer
La Apply
fonction prend deux paramètres: f
et args
où f
est une fonction et args
une liste. Il devrait s'appliquer f
au args
. Donc:
Apply(f, {a,b,c})
Retour
f(a,b,c)
Gamme
La Range
fonction prend un entier r
et génère les nombres entiers jusqu'à ce nombre. Donc:
Range(5)
Retour
{ 1, 2, 3, 4, 5}
Plier
La Fold
fonction prend trois paramètres f
, arg
, others
où f
est une fonction, arg
est simple paramètre, et others
une liste. Cela fonctionnera comme tel:
Fold(f, x, {a, b, c, d})
Retour
f(f(f(f(x,a),b),c),d)
Table
Les fonctions de table doivent prendre une fonction f
et un paramètre appelé iterator
sous la forme: {iMin, iMax}
où iMin
et iMax
sont des entiers. Vous devez appliquer f
sur la plage spécifiée. Donc:
Table(f, {0, 5})
Retour
{f(0), f(1), f(2), f(3), f(4), f(5)}
J'ai utilisé la définition de ces fonctions à partir de la page de programmation fonctionnelle de Mathematica , alors allez-y si vous avez besoin de plus d'informations. Notez que vous n'aurez pas besoin d'implémenter toutes les versions des fonctions présentées dans cette page, mais seulement celles écrites dans ce post.
Les échappatoires standard sont interdites comme d'habitude.
Dans le cas où votre langage ne permet pas de passer des fonctions comme arguments, vous devez implémenter cette fonctionnalité et l'ajouter à votre réponse. Cependant, le nombre d'octets de cette opération ne sera pas ajouté au total.
C'est le golf de code donc le code le plus court gagne. Bonne chance!!!
Table
fonctionne ici. Votre exemple est-il censé êtreTable(f, {x, 0, 5})
? Je ne comprends pas du tout le butx
, car il applique simplement la fonction à la plage.