Хламидомонада / Говнокод #29167 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
(defun foo (baz s a)
  (let ((ref #'foo))
    (defun foo (baz s a)
      (let ((ref #'foo))
        (if (zerop a)
          s
          (funcall baz ref s a))))
    
    (if (functionp baz)
      (funcall baz ref (1+ s) (1- a))
      (funcall #'foo ref (1+ s) (1- a)))))

Я объявляю конкурс, кто напишет самую запутанную и избыточную функцию сложения двух чисел которая только могла быть тот и победил. Я начну (см. код выше)

Запостил: lisp-worst-code lisp-worst-code, (Updated )

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

  • g: Определение единицы от Николы Бурбаки
    Ответить
    • Да, помню. Примерно так: единица — это количество элементов во множестве, которое состоит из единственного элемента. Т. е. берём произвольный объект, оборачиваем его во множество и считаем количество элементов в получившемся множестве.

      *****

      В данном же примере используются два факта:
      1. s + a ≡ (s+1) + (a-1).
      2. s + 0 ≡ s.
      При этом инкремент и декремент (на единицу) считаются вполне определёнными операциями.

      Только это всё ещё запутано переопределением функции foo дважды.

      Предлагаю пойти дальше и определить умножение, используя два факта:

      1. p * a ≡ p + p * (a-1).
      2. p * 1 ≡ p.

      Сложение, естественно, вычислять функцией из данного говнокода, чтобы получить квадратичную сложность.
      Ответить
      • Варианты:

        p * a ≡ (p << 1) * (a >> 1) + p * (a % 2).

        p * a ≡ (p+1) * (a-1) + (p-a) + 1. Здесь придётся определить вычитание.
        Ответить
      • Перевёл на «C++».
        #include 
        
        template
        concept non_negative= A >= 0;
        
        template requires non_negative<A> && non_negative<B>
        struct adder
        {
            constexpr auto operator()() const {
                return adder<A>{}();
            }
        };
        
        template
        struct adder<A>
        {
            constexpr auto operator()() const {
                return A;
            }
        };
        
        int main()
        {
            std::cout << adder{}() << std::endl;
            return EXIT_SUCCESS;
        }
        Ответить
        • >requires

          няшно. Гляжу, крестобляди всерез озаботились отловом ошибок на максимально ранней стадии

          Ну чтж, похвально, похвально.

          А в языках для анскилябрных петухов (пхп, джава -- это тот же пхп, только тормозит) принято сообщать об ошибке в рантоайме, и показывать ее пользователю

          пусть пользователь разбирается!
          Ответить
          • В 2025 году стандартизаторы добавили 65 новых ключевых слов?
            Ответить
            • Да, кстати, раньше же в крестах были сплошные &&<>||[]{}, а тут слова появились.
              Ответить
    • Пых это такой пост-модерн: хуевая пародия на ЯЖУ которая сама по себе хуевая пародия на ООП.

      Искуство это палимпсест
      Один посрет -- другой поест
      Ответить
      • Зато оцени, как расширяемо:
        use SimplePHPEasyPlus\Number\NumberCollection;
        use SimplePHPEasyPlus\Number\SimpleNumber;
        use SimplePHPEasyPlus\Number\CollectionItemNumberProxy;
        use SimplePHPEasyPlus\Parser\SimpleNumberStringParser;
        use SimplePHPEasyPlus\Iterator\CallbackIterator;
        use SimplePHPEasyPlus\Operator\AdditionOperator;
        use SimplePHPEasyPlus\Operation\ArithmeticOperation;
        use SimplePHPEasyPlus\Operation\OperationStream;
        use SimplePHPEasyPlus\Engine;
        use SimplePHPEasyPlus\Calcul\Calcul;
        use SimplePHPEasyPlus\Calcul\CalculRunner;
        
        
        $numberCollection = new NumberCollection();
        
        $numberParser = new SimpleNumberStringParser();
        
        $firstParsedNumber = $numberParser->parse('1');
        $firstNumber = new SimpleNumber($firstParsedNumber);
        $firstNumberProxy = new CollectionItemNumberProxy($firstNumber);
        
        $numberCollection->add($firstNumberProxy);
        
        $secondParsedNumber = $numberParser->parse('1');
        $secondNumber = new SimpleNumber($secondParsedNumber);
        $secondNumberProxy = new CollectionItemNumberProxy($secondNumber);
        
        $numberCollection->add($secondNumberProxy);
        
        $addition = new AdditionOperator('SimplePHPEasyPlus\Number\SimpleNumber');
        
        $operation = new ArithmeticOperation($addition);
        
        $engine = new Engine($operation);
        
        $calcul = new Calcul($engine, $numberCollection);
        
        $runner = new CalculRunner();
        
        $runner->run($calcul);
        
        $result = $calcul->getResult();
        $numericResult = $result->getValue(); // 2


        Можно расширить для других систем счисления, для других пространств и даже не только для чисел. Только нужные классы-делегаты подставить.
        Ответить
  • Можно реализовать сложение столбиком для строкового десятичного представления. Точно скучно не будет.
    Ответить
  • Ещё можно так (для вещественных чисел): a + b = log(exp(a) * exp(b)).
    Ответить
  • Петузы, хотите загадку?

    Я прибайндился к `INADDR_LOOPBACK`, а затем к `INADDR_ANY`
    Что произойдет?
    Ответить
    • А ничего не будет, занят уже адрес.
      Ответить
      • Правильный ответ het hangt af van.

        на виньсоке семантика такая
        >
        If an application does not care what local address is assigned, specify the constant value INADDR_ANY
        >
        https://learn.microsoft.com/en-us/windows/win32/api/winsock/nf-winsock-bind

        и ты не порвешь, но INADDR_ANY набиндится на ВСЕ адреса КРОМЕ лупбочного интерфейса

        Вот буквально
        c:\>netstat -nao  | findstr 50007
          TCP    0.0.0.0:50007          0.0.0.0:0              LISTENING       32048
          TCP    127.0.0.1:50007        0.0.0.0:0              LISTENING       25952



        grapig, he?
        Ответить
  • Зев акулы, волчий клык,
    Ночью сорванный мутник,
    Плоть сушеная колдуньи,
    Тис, наломанный в безлунье,
    Желчь козленка, селезенка
    Богомерзкого жидeнка,
    С чешуей драконья лапа,
    Губы турка, нос арапа,
    Пальчик детки удушенной,
    Под плетнем на свет рожденной,
    Тигра потрох размельченный —
    Вот в котел заправа наша,
    Чтобы гуще вышла каша..
    Ответить

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

Из-за тебя ушел bormand, guest!

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


    8