1
votes

Confus à propos de la fonction javascript renvoyant plusieurs fonctions avec de nombreuses flèches grasses

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;}


0 commentaires

3 Réponses :


1
votes

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)))


6 commentaires

@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) ?



1
votes

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 par pair ( 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;
  }
};

1 commentaires

Puis permutez la logique dans chaque fonction.



0
votes

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)))


2 commentaires

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.