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

2.2 KiB
Raw Blame History

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

Комбінатор Y сам по собі є функцією без стану, яка при застосуванні до іншої такої функції повертає рекурсивну версію функції. Y комбінатор є найпростішим із класу таких функцій, які називаються комбінаторами з фіксованою точкою.

--instructions--

Визначте функцію Y-комбінатора без збереження стану та використайте її для обчислення факторіалів. Функція factorial(N) вже дана.

--hints--

Y повинен повернути функцію.

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

factorial(1) повинен повернути 1.

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

factorial(2) повинен повернути 2.

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

factorial(3) повинен повернути 6.

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

factorial(4) повинен повернути 24.

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

factorial(10) повинен повернути 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)));