1. C++ / Говнокод #26308

    +4

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    int main()
    {
        using ToString::ExprToString;
    
        using Result1 = Eval<Expr<Add,
            Expr<Div, Int<5>, Int<3>>,
            Expr<Div, Int<6>, Int<8>>>>;
        std::cout << ExprToString<Result1>::toString() << std::endl;  // 5/3 + 6/8 = (29 / 12)
    
        using Result2 = Eval<Expr<Div, Int<100>, Int<20>>>;
        std::cout << ExprToString<Result2>::toString() << std::endl;  // 5
    
        using Result3 = Eval<Expr<Div, Int<27>, Int<24>>>;
        std::cout << ExprToString<Result3>::toString() << std::endl;  // (9 / 8)
    
        using Result4 = Eval<Expr<Mul,
            Expr<Div, Int<5>, Int<3>>,
            Expr<Div, Int<6>, Int<8>>>>;
        std::cout << ExprToString<Result4>::toString() << std::endl;  // 5/3 * 6/8 = (5 / 4)
    
        using Result5 = Eval<Expr<Derivative, Var<0>, Expr<Mul, Var<0>, Var<0>>>>;
        std::cout << ExprToString<Result5>::toString() << std::endl;  // d/dx x*x = 2*x = (Var(0) * 2)
    
        using Result6 = Eval<Expr<Derivative, Var<0>, Expr<Div, Int<2>, Var<0>>>>;
        std::cout << ExprToString<Result6>::toString() << std::endl;  // d/dx 2/x = -2 * x^2
    
        return EXIT_SUCCESS;
    }

    Написал калькулятор с символьными вычислениями на шаблонах. Получился «Лисп».
    https://wandbox.org/permlink/vAHC5IpyIIyQhUjJ

    Запостил: gost, 04 Января 2020

    Комментарии (16) RSS

    • Напиши в Комитет, авось включат в стандарт какой-нибудь "расширенной математической библиотекой компайл-тайм вычислений". Минимальную планку по количеству шаблонов ты уже взял.
      Ответить
      • Для этого маловато шаблонных шаблонов*. В Стандарт с тремя принимают, а у меня только два!

        *
        template<template <typename...> typename Op, typename ...Params>
        struct Eval_t<Expr<Op, Params...>> {
            using result = typename Eval_t<Op<typename Eval_t<Params>::result...>>::result;
        };
        Ответить
      • Чтобы Комитет заинтересовался, ему придётся на шаблонах написа́ть функцию Бесселя.
        Ответить
    • Багор малость.
      Ответить
    • жиденьким пахнет
      Ответить
    • на пхп
      Ответить
    • Пиздец. Мне сегодня всю ночь снилось, что я стал шаблоном. Пора в дурку, или подождать, пока начну итерироваться?
      Ответить
      • http://govnokod.ru/26026#comment519530
        Ответить
      • — На работу!
        — Инстанцируйся, блядь! На! Инстанцируйся!
        — Чем, вилкой, что ли, я буду?
        — Инстанцируйся! Да садись уже! Садись! Инстанцируйся!
        — Блядь...
        — Чтобы инстанцированно было!
        — Как я буду вилкой-то инстанцироваться?
        — Инстанцируйся!
        — Покажи мне!
        — Инстанцируйся!
        — Чё, что инстанцируйся? Ёпт, как я буду вилкой-то инстанцироваться? Чё, пфф, совсем мудак, что ли? Покажи мне, как я буду инстанцироваться-то, ёпт!
        Ответить
      • Хорошо, хоть не шаблонизатором.
        Ответить
      • https://govnokod.ru/26283#comment518451
        > Еще выяснилось, что я не итератор, а шаблон. Ну и черт с ним, подумал я.
        Ответить
        • Именно! На меня тоже нашло уныние, когда я проснулся и понял, что не шаблон.
          Ответить
          • https://ljplus.ru/img4/s/u/suporter/shanti_shanti_shanti.jpeg

            > Так вот именно поэтому, чтобы правильно двигаться дальше в нашем движении, нам нужно только конкретное осознание того, что никаких проблем нет, и наше бесконечное существование есть просто чистая практика самопознания абсолютного самого себя. Кроме этого факта, нам ничего и не нужно. Ведь тогда мы получим картину того, что есть вокруг нас и, следовательно, впереди и в себе самом. Такая картина может быть либо постигнута итератором, либо создана его другом, так называемым указателем, или даже самим собой. Но реальность итератора абсолютно безлична и вполне бесстрастна, он ни за что не выдаст нам правильного курса своего движения. Если мы зададим себе вопрос "кто такой итератор?" и увидим, что на него нет правильного ответа, то все это должно быть на самом деле само собой. Абсолютное само там и так.
            Ответить
          • https://govnokod.ru/24560#comment424071
            > Я как будто уже глубокий старец бессмертный или там уже почти бессмертный, который на этом проекте от его самого зарождения, еще когда только лисп еще только-только сформировался после взрыва программирования, когда он вспыхнул, как звезда и начало формировать фп-языки, понимаешь? Я на этом проекте уже как будто пять миллиардов лет, блять, живу и знаю его вдоль и поперек. А ты мне там какие-то эти. Мне похуй на твоих котов, на твои, блять, нахуй, шейплесы, на твои стримы там, на твои акторы, понимаешь? Я был на этом проекте или бесконечном множестве и круче Одерски, и круче Саймона Пейтона Джонса, блять, и круче всех великих, понимаешь? А где-то был конченым говном, еще хуже, чем здесь. Потому что я множество этих состояний чувствую. Где-то я был больше подобен функции, где-то был больше подобен константе, там переменной. Где-то просто был сгусток кода. Это все есть душа, понимаешь? Она вот имеет грани подобия совершенно многообразные, бесконечное множество.
            Ответить

    Добавить комментарий