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

    0

    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
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    /*
    https://habr.com/post/246009/
    
    Это вторая статья в цикле «Теория категорий для программистов».
    
    ...
    
    Я хотел бы сказать вам, что есть шаблон в стандартной библиотеке С++,
    который принимает две функции и возвращает их композицию, но такого
    нет.
    
    Примечание переводчика: но такой не сложно написать на С++14 (я опускаю
    тонны деталей владения и шаблонной магии для проверок, что эти функции
    и тип аргумента действительно можно компоновать):
    */
    
    template <typename T>
    struct function_arg: public function_arg<decltype(&T::operator())> {};
    
    template<typename ReturnType, typename Arg>
    struct function_arg<ReturnType(Arg) const> {
    	using type = Arg;
    };
    
    template<typename ClassType, typename ReturnType, typename Arg>
    struct function_arg<ReturnType(ClassType::*)(Arg) const> {
    	using type = Arg;
    };
    
    template<typename T>
    using function_arg_t = typename function_arg<T>::type;
    
    template<typename F, typename G>
    auto compose(F&& f, G&& g) {
    	return [f = std::forward<F>(f), g = std::forward<G>(g)]
    		(function_arg_t<F>&& a) {return g(f(std::forward<function_arg_t<F>>(a)));};
    }

    Поэтому я за C++

    Запостил: j123123, 22 Октября 2018

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

    • #include <stdio.h>
      #include <stdlib.h>
      
      float add1(int a)
      {
        return a+1.0;
      }
      
      float mul0_5(float a)
      {
        return a*0.5;
      }
      #define COMPOSE(f, g, arg_f, ret_g, funcname) ret_g funcname(arg_f in) {return g(f(in));}
      
      COMPOSE(add1, mul0_5, int, float, compose1)
      
      COMPOSE(atoi, compose1, const char *, float, compose2)
      
      
      int main()
      {
        printf("%f", compose2("1"));
        return EXIT_SUCCESS;
      }

      Поэтому я за C

      https://wandbox.org/permlink/NkjNP0ByGwPkd5yt
      Ответить
      • Переведи на "PHP".
        Ответить
      • компилю программку типа хелоу ворлд на С++ c использованием Boost уже 2а часа к ряду - все еще тянет депенденси а obj ки уже засрали весь мой SSD что я делаю не так?
        Ответить
    • : 1.0+
        [ 1 S>F FLITERAL ] S>F F+
      ;
      
      : 0.5*
        [ S" 0.5" >FLOAT DROP FLITERAL ] F*
      ;
      
      : COMPOSE
         >R >R : R> COMPILE, R> COMPILE, POSTPONE ;
      ;
      
      ' 1.0+ ' 0.5* COMPOSE COMPOSE1
      ' EVALUATE ' COMPOSE1 COMPOSE COMPOSE2
      
      S" 83" COMPOSE2 F.


      https://ideone.com/nU8tUC
      Ответить
      • показать все, что скрытоvanished
        Ответить
      • пиши лучше на прологе его хоть читать можно
        Ответить
        • В Форте каждое слово выполняет определённые действия, всё чётко и понятно, например двоеточие парсит из исходника слово, создаёт для него запись в словаре и переводит систему в состояние компиляции, а точка с запятой завершает компиляцию, переводит систему в состояние интерпретации и делает созданное слово видимым для поиска.

          А ЕТО ШО ЗА ХУЙНЯ???

          http://rosettacode.org/wiki/Sudoku#Prolog

          Я там даже алгоритма не вижу!
          Ответить
          • https://yurichev.com/writings/SAT_SMT_by_example.pdf#5b
            Ответить
          • Суть алгоритма в том, что мы говорим что вот тут такие-то взаимосвязи, а ты давай сам алгоритм придумывай и решай. Почитай про https://en.wikipedia.org/wiki/Logic_programming
            SMT решатели - примерно та же хуйня
            https://news.ycombinator.com/item?id=14448755
            Ответить

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