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

1.9 KiB

id, title, challengeType, forumTopicId, dashedName
id title challengeType forumTopicId dashedName
594810f028c0303b75339ad5 Combinatore 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.

Il combinatore Y è esso stesso una funzione senza stato che, quando applicata ad altre funzioni senza stato, restituisce una versione ricorsiva della funzione. Il combinatore Y è la più semplice delle classi di queste funzioni, chiamate combinatori a punto fisso.

--instructions--

Definisci la funzione combinatore senza stato Y e usala per calcolare i fattoriali. La funzione factorial(N) ti è già stata fornita.

--hints--

Y dovrebbe restituire una funzione.

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

factorial(1) dovrebbe restituire 1.

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

factorial(2) dovrebbe restituire 2.

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

factorial(3) dovrebbe restituire 6.

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

factorial(4) dovrebbe restituire 24.

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

factorial(10) dovrebbe restituire 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)));