Files
freeCodeCamp/curriculum/challenges/espanol/22-rosetta-code/rosetta-code-challenges/y-combinator.md
2024-01-24 19:52:36 +01:00

1.8 KiB

id, title, challengeType, forumTopicId, dashedName
id title challengeType forumTopicId dashedName
594810f028c0303b75339ad5 Combinator Y 1 302345 y-combinator

--description--

In strict functional programming and the lambda calculus, functions (lambda expressions) don't have state and are only allowed to refer to arguments of enclosing functions. This rules out the usual definition of a recursive function wherein a function is associated with the state of a variable and this variable's state is used in the body of the function.

El combinador Y es pos sí mismo una función sin estado que, cuando se aplica a otra función, devuelve una versión recursiva de la función. El combinador Y es el más simple de la clase de tales funciones, llamados combinadores de punto fijo.

--instructions--

Define la función Y combinador sin estado y la usa para computar los factoriales. La función factorial(N) ya se te fue dada.

--hints--

Y debe devolver una función.

assert.equal(typeof Y((f) => (n) => n), 'function');

factorial(1) debe devolver 1.

assert.equal(factorial(1), 1);

factorial(2) debe devolver 2.

assert.equal(factorial(2), 2);

factorial(3) debe devolver 6.

assert.equal(factorial(3), 6);

factorial(4) debe devolver 24.

assert.equal(factorial(4), 24);

factorial(10) debe devolver 3628800.

assert.equal(factorial(10), 3628800);

--seed--

--after-user-code--

var factorial = Y(f => n => (n > 1 ? n * f(n - 1) : 1));

--seed-contents--

function Y(f) {
  return function() {

  };
}

var factorial = Y(function(f) {
  return function (n) {
    return n > 1 ? n * f(n - 1) : 1;
  };
});

--solutions--

var Y = f => (x => x(x))(y => f(x => y(y)(x)));