J'ai un problème avec mes devoirs de CS.
J'ai besoin d'accéder à la valeur x
de la fonction, mais mes codes me renvoient une fonction vide au lieu des valeurs
J'ai recherché sur Google tous les curry et fermetures, mais aucun d'entre eux n'est avancé assez pour m'aider à résoudre mon problème
const pair = (x, y) => f => f(x, y); // Do not edit this function const head = p => //Answer here console.log(head(pair(1,2))) // Do not edit this
ma console continue de me renvoyer des fonctions
à la place quand j'essaye toutes les combinaisons
function (a, b) {return a;}
3 Réponses :
Vous pouvez changer la fonction head
comme ceci:
const pair = (x, y) => f => f(x, y); const head = f => f(a => a) console.log(head(pair(1,2)))
@Peter ici, pair
est exécuté avant head
. Vous pouvez ajouter console.log ()
pour le vérifier.
@Peter a vu votre modification à la question maintenant. head
mis à jour
@Peter je ne t'ai pas compris. "passer en fonction comme paramètre " où?
@ adiga Je n'obtiens pas la partie f (a => a) après l'avoir regardée pendant très longtemps
a => a
est une fonction fléchée tout comme (x, y) => f
. Vous pouvez l'écrire comme (a, b) => a
si c'est trop déroutant
Je comprends (x, y) => f
mais je ne comprends pas f => f (a, b => a
prend-il une fonction f
puis ouvrir f
qui contient les paramètres (a, b)
?
ma console continue de me renvoyer ceci à la place
function (a, b) {return a;}
Rendons cela plus facile à lire. Dans ES5, votre code ressemble à ceci:
console.log(pair(1, 2)(head()));Vous devez passer la fonction renvoyée par
head
à la fonction retournée parpair ( 1, 2)
. Vous devez donc changer l'ordre dans lequel vous appelez les fonctions:var pair = function(x, y) { return function(f) { return f(x, y); } }; var head = function(p) { return function(a, b) { return a; } };
Puis permutez la logique dans chaque fonction.
Je ne sais pas si j'ai bien compris votre question, mais je suppose que vous essayez de le faire
const pair = (x, y) => f => f(x, y); const head = f => f(a => a); console.log(head(pair(1,2)))
sinon alors celui ci-dessus est correct
const pair = (x, y) => f => f(x, y); const head = (x, y) => x; console.log((pair(1,2)(head)))
Qu'est-ce que cela ajoute? Ces deux éléments sont déjà mentionnés dans les réponses ci-dessus
Le premier n'est pas le même que ci-dessus mais le second oui. Je n'ai pas pu commenter leur ainsi mentionné ce point ici.