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, Foldet Tabledans 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 Mapfonction prend deux paramètres: fet listoù fest une fonction et listest une liste de valeurs. Il doit renvoyer l' fappliqué à 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 Nestfonction prend trois paramètres ainsi: f, arg, timesoù fest une fonction, argest son argument de départ, et timesest combien de fois la fonction est appliquée. Il doit renvoyer une expression avec fdes timestemps 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 Applyfonction prend deux paramètres: fet argsoù fest une fonction et argsune liste. Il devrait s'appliquer fau args. Donc:
Apply(f, {a,b,c})
Retour
f(a,b,c)
Gamme
La Rangefonction prend un entier ret génère les nombres entiers jusqu'à ce nombre. Donc:
Range(5)
Retour
{ 1, 2, 3, 4, 5}
Plier
La Foldfonction prend trois paramètres f, arg, othersoù fest une fonction, argest simple paramètre, et othersune 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 fet un paramètre appelé iteratorsous la forme: {iMin, iMax}où iMinet iMaxsont des entiers. Vous devez appliquer fsur 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!!!
Tablefonctionne 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.