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

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
(defun question-2 ()
  (let ((b '(1 2 3))
        (a '(1 2 3 4))
        (com (make-hash-table :test #'equal)))
    (labels ((put-sorted (x)
               (let ((key
                      (sort
                       (flatten
                        (copy-tree x)) #'<)))
                 (if (gethash key com)
                     (incf (gethash key com))
                     (setf (gethash key com) 1)))))
      (values (remove-if
       #'(lambda (x)
           (prog ((results
                  (do ((x x (cdr x)) (r))
                      (nil)
                    (setf r (append (cadar x) r))
                    (when (null (cdr x))
                      (return r)))))
             (dolist (y a)
               (when (not (member y results))
                 (go remove-it)))
             (put-sorted results)
             (go keep-it)
             remove-it (return t)
             keep-it nil))
       (all-functions b (cartesian-product a))) com))))

Ну, чем бы еще порадовать. Вот, родилось во время проверки домашних заданий :)

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

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

  • Это на чем вообще написано, что за высер такой?
    Ответить
        • Диалектов много, знаете ли, и не все мне нравятся.
          Скобок во всех лиспах хватает ололо в clojure скобок меньше чем в жабе
          Ответить
        • Зато скобки позволяют в редакторе одним легким нажатием клавиш выделить следующуй нон-терминал / выражение, при чем любой степени сложности.
          Ответить
  • Более подробный комментарий:
    Тут, вобщем, как в комиксе с динозавром и goto получилось. Было очень влом переделывать по-нормальному. При чем 2 раза (но второй нужно объяснять, и мне лень) там можно было бы без do цикла сделать быстрее через (mapcan #'cdr ...) но я не сразу сообразил в чем фишка, и лень было разбираться.
    Ответить
  • 1) CL это второй язык после хаскеля, в котором функции в районе 10 строк нечитабельны.

    2) Зачем загонять все задание в одну функцию. ИМХО это только создает лишние labels'ы let'ы, уровни вложенности и проблемы при чтении.
    Ответить
    • Лол, и вправду, на Хаскелле если это нельзя записать 1-5 строчек, лучше вообще никак не писать.
      Ответить
  • Кстати, а можно посмотреть на определения cartesian-product и all-functions?
    Ответить
    • Не читабельны, ну... без преувеличений, плохо читабельны - тут можно согласится. Но эта конкретная функция имеет повышенную степень нечитабельности изза лени автора (ее можно было сократить, разбить на меньшие функции, и не придумывать извращенные решения - но автора мучала лень, и нужно было просто быстро проверить результат).

      Остальные функции: да, пожалуйста:
      http://pastebin.com/tWQrciWM


      Вроде ничего не забыл.
      Ответить

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

Я, guest, находясь в здравом уме и твердой памяти, торжественно заявляю:

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


    8