Куча говна / Говнокод #25540 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  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
  38. 38
  39. 39
  40. 40
  41. 41
  42. 42
  43. 43
  44. 44
  45. 45
  46. 46
  47. 47
  48. 48
  49. 49
  50. 50
  51. 51
  52. 52
  53. 53
  54. 54
  55. 55
  56. 56
  57. 57
  58. 58
  59. 59
  60. 60
  61. 61
  62. 62
  63. 63
  64. 64
  65. 65
  66. 66
  67. 67
  68. 68
  69. 69
  70. 70
  71. 71
  72. 72
  73. 73
  74. 74
  75. 75
  76. 76
# это комментарий #
COMMENT это понятно что COMMENT
CO это тоже ко-ко-коментарий CO

CO функция принимает 3 параметра типа INT и возвращает ссылку на массив CO
PROC range = (INT start, end, step)REF[]INT : (
    INT length = ABS((end - start) % step);
    NEW [0 : length - 1]INT result; CO массив в куче CO
    CO LWB —– нижний индекс массива, UPB —– верхний CO
    FOR i FROM LWB result TO UPB result
    DO
        result[i] := start + i * step
    OD;
    result CO функции возвращают результат последнего вычесленного выражения CO
);

CO можно определять свои операторы CO
OP RANGE = (INT start, end)REF[]INT: range(start, end, (start < end | 1 | -1));
PRIO RANGE = 5; CO для бинарных операторов нужно задать приоритет, у сложения/вычитания приоритет = 6 CO

CO для операторов возможна перегрузка по количеству и типу аргументов CO
OP RANGE = (INT end)REF[]INT: 0 RANGE end;

OP ACCUM = ([]INT x, PROC(INT,INT)INT f)INT : (
    INT length = UPB x - LWB x;
    IF length = 0 THEN
        1
    ELIF length = 1 THEN
        x[LWB x]
    ELSE
        INT result;
        result := x[LWB x];
        FOR i FROM LWB x + 1 TO UPB x
        DO
            result := f(result, x[i])
        OD;
        result
    FI
);
PRIO ACCUM = 5;

CO правый операнд у ACCUM —– лямбда CO
OP ! = (INT x)INT: 1 RANGE x + 1 ACCUM ((INT x, y)INT: x * y);

printf(($g(0), "! = ", g(0), l$, 7, !7));

OP MAP = ([]INT x, PROC(INT)INT f)REF[]INT : (
    NEW [LWB x : UPB x]INT result;
    FOR i FROM LWB x TO UPB x
    DO
        result[i] := f(x[i])
    OD;
    result
);
PRIO MAP = 5;

PROC pow = (INT x, n)INT: x ^ n;

CO каррирование CO
printf(($g(0), " "$, RANGE 10 MAP pow(2, )));
print(new line);

OP FOREACH = (REF[]INT x, PROC(REF INT)VOID f)VOID : (
    FOR i FROM LWB x TO UPB x
    DO
        f(x[i])
    OD
);
PRIO FOREACH = 5;

REF[]INT a = -5 RANGE 6;
a FOREACH ((REF INT x)VOID:
    x := x ^ 2
);

printf(($g(0), " "$, a))

https://tio.run/##jVVdbxJBFH3nV1xbTXZ1iaBpNVQfkFIlKV2C1T40mJBIkYRgUzFdEx@wtRpTPx70hyCWlkLBvzDzF/wj9dw7s0uBmgiF7syce@fOuecM5Xr1ZX3xbvX8fJ70F72nRqT6aqTO8O6qISbauqV66pTmYxk/n8@urUe438AN9TcMhhjqjzJrQQCHOP5Sx6oriePR18wGGT8mUe/1PhL29QfV09@wiywP8TlTbdXVe3Sbt@aoNufQe/zEu/R4mnKoUPVIdbDFierwov5kI/U7vA/VANn3CTnbxEl5FsEdrqBQ9DO0U25UK3SfHM71qlneaXpUaTz38FzZdovZlc0Sr6TIiRFe/FyvNKrNF4hJP3jsOABT3ES6dM2ELQl2LbtBmwmE2oA4JSXXTuXV63pzCSVMlsR/KFZ/BH8oj1MAsrrxgP60fvxpfSdh5li@T0mIOgKvff1uIo9qe/SkMA7qgI6WPrBhNvGKX6QarRT9vGxgSqJ1XyLNSHDLBs4vM7tZK1Hqvjkv3UCO63JkQfnL5uA221SDL2mU/sqNauEQJ8AN9GeRyJ7IDYcZYOEI4V31izXY0YfMjV0YshLHC6yQY5lmJeGUaELMMDwSzoAbicC6wtqAxaw/QyZSVE9WmSkuALu39CFn8QtUTK89zM4qJNJGymjIuSgeM6B7PKK3lMQnnnRRUqGY86OMC0YDR1wMqZ/SUdb6EOc5mCkIYwhkCKLscU5w5CNexTGsdRjWAxwG8Ai6F65GY2JuWhIZ07ZczYaitMXQomF1lxZj2hky3CaLQb/A3z6W@mbSXjQDbCANRI4Ou7JnrczPfPBfCAqvipEx6XQDJplP2EXMot3ApjOZJ3nGGtsGHrHLOdLDx@W5LfefhmbxB/ApWyIwWs6tjJcTtP4ouxYZIilP2dWLkOQkJNiUVCWLfJyNVi5cBFMOY3uFceO1KcMG8F4y9GsQoS7YdTLhlmOePaSuldwIFVp2jDbXQy4WijVkdMH66bdYDTLiOyhSBd9FLDiDDq8eKAf9/Mkqtb28EvYxcKWBSdtAcx4T7Ti2dW8MJsAd84btvL1TazS3HOdq1Um4Hs1xsjmPzKh@1aM7Hl25wzbjrfLpwqVCsCKYudrlujbcpgytpekmzTRhogH/uiu3nDHnk1dkRLKplSmWH6Xtl7sRTx41QhqeUcM2oc92EcOKE42Xzc/GNEk0B2IMycmEbITszi2PXCZK0E6jskv1WqNimcMxs@nMIy4hYikkEBOsXfepn1sGi/IvZPC/6ZlkJGJhvC8zEW1dxkR8wZ5hcSlWjoBOWA7kxJWkJGMgDgJbt2KXqUYIKbvu@flf
Давайте течь от "Algol-68".

Запостил: BOKCEJIbHblu_nemyx BOKCEJIbHblu_nemyx, (Updated )

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

  • Давайте разбирать.

    Сам синтаксис –— жуткая смесь «Си» и «Паскаля». Ну они и вышли из «Алгола», только разделились на остроконечников и тупоконечников.

    Порадовали операторы, которым программист может назначать приоритет. Даже в крестах такого нет: там готовый набор символов, которые можно переопределять, с заранее заданным приоритетом.

    Встроенные операторы для определения границ индекса массива. Эти операторы унаследовали Паскаль (в виде функций High и Low) и язык Ада (в виде атрибутов 'First, 'Last, 'Range, 'Length), но проигнорировал язык Си. В сишке вообще арифметика указателей для бесконечной ленты вместо нормальных массивов, как будто мы собираемся реализовывать машину Тьюринга или интерпретатор Брейнфака.

    Динамические массивы в куче с произвольными диапазонами индексов.

    Анонимные функции.

    Неужели всё это было в 1968-м году?

    Про каррирование жду пояснений.
    Ответить
      • 1. Сам лишп при этом был нахуй никому не нужен.
        2. Там гц весьма списифисиський.
        Ответить
        • у тебя опечатка; не "никому" а "сёме"
          Ответить
            • * Google actively develops one of the Lisp compilers. Google Flights powers Orbitz, Kayak, etc. That's Lisp.

              * There are several Lisp compilers in active open source development.

              * There's a graph database written in Lisp called AllegroCache. It's good enough to support a business (Franz) for more than a decade.

              * Another company (LispWorks) also exists and has a large portfolio of clie

              https://news.ycombinator.com/item?id=13137393


              говна на вертилятор

              но вообще нужность и ненужность это относительные вещи

              мне вот жаваскрипт не нужен, и программисты на нем тоже не нужны

              тем не менее они плодятся как тараканы, и сам джс подобно саркоме растет и его метастазы уже везде
              Ответить
        • Его вроде учёные юзали (впрочем, в 50-х конпуктеры в основном только учёные и юзали), в исследованиях ИИ, для распознавания речи, машинного перевода, символьных вычислений и для прочей нинужной петушни.

          > гц весьма списифисиський.
          Какой же?
          Ответить
          • Ну я так понимаю, что если аргументы map после вызова не использовались, то модификация происходила на месте. Это тебе не современный гц.
            Ответить
            • А причём тут "GC"? Он только сраньё убирает, на работу функций он никак не влияет.
              Ответить
              • В лишпе переменные как бы немутабельные, а тут он какбэ создает новые и сжигает старые.
                Ответить
    • У функции pow в строке 60 отсутствует один аргумент, в таком случае возвращается функция которая принимает недостаюшие параметры.
      Ответить
      • Вместо того, чтобы описывать новую функцию или выражение, возвращающее лямбду, достаточно написать вызов функции с опущенными аргументами (как в
        этом примере pow(2,)) и всё? Так коротко?
        Ответить
        • Как легко обосраться и сделать опечатку?
          Ответить
          • Именно поэтому я за «PHP»:
            <?php
            function pow2_($x) {
                return pow(2, $x);
            }
            
            function pow_2($x) {
                return pow($x, 2);
            }
            Ответить
              • <?php
                
                function apply_first_argument($callback, $arg) {
                    return function()use($arg, $callback) {
                        $other_args = func_get_args();
                        array_unshift($other_args, $arg);
                        return call_user_func_array($callback, $other_args);
                    };
                }
                
                function apply_last_argument($callback, $arg) {
                    return function()use($arg, $callback) {
                        $other_args = func_get_args();
                        array_push($other_args, $arg);
                        return call_user_func_array($callback, $other_args);
                    };
                }
                
                $pow2_ = apply_first_argument(pow, 2);
                $pow_2 = apply_last_argument(pow, 2);
                echo '2 ^ 3 = ' . $pow2_(3) . PHP_EOL;
                echo '3 ^ 2 = ' . $pow_2(3) . PHP_EOL;


                https://ideone.com/QO1oCh
                Ответить
                • Всё равно мокро. Нужен бинд и плейсхолдерс как в крестах.
                  Ответить
                  • Интересно.

                    Если я правильно понял, то std::bind позволяет передавать аргументы в любом порядке. Т. е. можно сделать std::bind(f, _3, _2, _1), чтобы аргументы подставились задом наперёд?
                    Ответить
                    • > _3, _2, _1
                      Чёрт, 'J' меня испортил, я сперва подумал, что это отрицательные числа.
                      Ответить
                  • Я придумал:

                    <?php
                    
                    function ArgumentMixer($callback) {
                        return function()use($callback) {
                            $args = func_get_args();
                            shuffle($args);
                            return call_user_func_array($callback, $args);
                        };
                    }
                    
                    function trivial_print() {
                        echo implode(' ', func_get_args()) . PHP_EOL;
                    }
                    
                    $funny_print = ArgumentMixer('trivial_print');
                    
                    $funny_print('пить', 'меньше', 'надо'); 
                    $funny_print('пить', 'меньше', 'надо');
                    $funny_print('пить', 'меньше', 'надо');
                    $funny_print('пить', 'меньше', 'надо');
                    $funny_print('пить', 'меньше', 'надо');
                    $funny_print('пить', 'меньше', 'надо');


                    https://ideone.com/XN0Y4Y
                    Ответить
                  • А для сишки кто-нибудь пытался реализовать (кроме Царя; у него стрёмный вариант, потому что полагается на протухшие данные в стеке)?
                    Ответить
                    • Для сишки сложно. А вот так это будет реализовано на C#:
                      using System;
                      using System.Reflection;
                      
                      public class Test
                      {        
                      	delegate T Param<T>(params object[] args);
                          static Param<T> skipArg<T>(Type type, string method, int ind, object value, Type[] types = null)
                          {
                              MethodInfo mi;
                              if (types == null) mi = type.GetMethod(method);
                              else mi = type.GetMethod(method, types);
                              return delegate (object[] _args)
                              {
                                  int len = _args.Length;
                                  object[] args = new object[len + 1];
                                  Array.Copy(_args, 0, args, 0, ind);
                                  Array.Copy(_args, ind, args, 1 + ind, len - ind);
                                  args[ind] = value;
                                  return (T)mi.Invoke(null, args);
                              };
                          }
                       
                          static void Main()
                          {
                              Param<double>
                                  pow2_ = skipArg<double>(typeof(Math), "Pow", 0, 2),
                                  pow_2 = skipArg<double>(typeof(Math), "Pow", 1, 2);
                              Console.WriteLine("2 ^ 3 = {0}", pow2_(3)); // 2 ^ 3 = 8
                              Console.WriteLine("3 ^ 2 = {0}", pow_2(3)); // 3 ^ 2 = 9
                          }
                      }

                      https://ideone.com/WiUFJi
                      Ответить
                    • j123123 в треде про конференцию поехавших крестовиков что-то такое делал, полностью валидное.
                      Ответить
      • Лишпом и сейчас никто не пользуется.
        Ответить
        • Роман Кашицын пишет на нём плагины для емакса.
          Ответить
        • лиспом дохуя кто пользуется

          просто на форуме програмистов под вордпресс про это не пишут
          Ответить

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

Переведи на "PHP", guest!

    А не использовать ли нам bbcode?


    8