Факториал на числах Чёрча — теперь и в смайликах

    Всем доброго утра




    Это полностью валидный код на JavaScript.

    Конечно же, не в таком виде.

    Вчера, листая список оставленного на потом, наткнулся на статью о вычислении факториала на числах Чёрча, нашёл в комментариях предложение реализовать на arrow functions.

    Но т.к. уже наступило 1 апреля, нужно что-нибудь интересное и необычное.

    var fact = ((cat) => (cat) (cat)) ((cat) => ((drunk) => ((idea) => (hrv) => ((bug) => (facepalm) => (swear) => (bug) (facepalm) (swear)) (((hrv) => (hrv) ((cat) => (cat) => (drunk) => (drunk)) ((cat) => (drunk) => (cat))) (hrv)) (((hrv) => (idea) => (cat) => (idea) ((hrv) (idea) (cat))) ((idea) => (cat) => (cat))) ((cat) => ((hrv) => (dog) => (idea) => (hrv) ((dog) (idea))) (hrv) ((idea) (((hrv) => (wasntme) => (tmi) => ((bug) => (bug) ((cat) => (drunk) => (drunk))) ((hrv) ((bug) => ((devil) => (heidy) => (facepalm) => (facepalm) (devil) (heidy) ) ((wasntme) (((bug) => (bug) ((cat) => (drunk) => (cat))) (bug))) (((bug) => (bug) ((cat) => (drunk) => (cat))) (bug))) (((devil) => (heidy) => (facepalm) => (facepalm) (devil) (heidy)) (tmi) (tmi)))) (hrv))) (cat))) ((cat) (cat)) (drunk)));
    

    (Отправлять через Skype).


    Вот и остальные функции, уже в более простом и естественном виде:
    var True = (x) => (y) => x;
    var False = (x) => (y) => y;
    
    var If = (p) => (t) => (e) => p(t)(e);
    // example: If(True)('foo')('bar')
    
    var Zero = (f) => (x) => x;
    var Succ = (n) => (f) => (x) => f(n(f)(x));
    var IsZero = (n) => n((x) => False)(True);
    
    var Mul = (n) => (m) => (f) => n(m(f));
    
    var Pair = (a) => (b) => (t) => t(a)(b);
    var Fst = (p) => p(True);
    var Snd = (p) => p(False);
    var Pred = (n) => (s) => (z) => Snd(n((p) => Pair(s(Fst(p)))(Fst(p)) )(Pair(z)(z)));
    


    За тем, как это всё работает — в исходную статью.
    Ну а использовать вот так:
    fact(Succ(Succ(Succ(Zero))))(function (x) { return x + 1; })(0); // => 6
    

    (где Succ — прибавление единицы).

    Всех с праздником!


    UPD:

    Видимо, в этот праздник мысли сходятся:
    Программирование смайликами.

    Похожие публикации

    Средняя зарплата в IT

    120 000 ₽/мес.
    Средняя зарплата по всем IT-специализациям на основании 3 288 анкет, за 1-ое пол. 2021 года Узнать свою зарплату
    Реклама
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее

    Комментарии 1

      +1
      Вот ещё вспомнилось: Emoji Lisp.
      Числа Фибоначчи:

      Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

      Самое читаемое