1. Haskell / Говнокод #20068

    −51

    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
    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
    data TTree k v =
      TNode {
        _key :: !k
      , _val :: !(Maybe v)
      , _eq :: !(TTree k v)
      , _left :: !(TTree k v)
      , _right :: !(TTree k v)
      , _height :: !Int
      }
      | TTNil
      deriving (Show, Generic)
    instance (Binary k, Binary v) => Binary (TTree k v)
    
    insertWith' :: (Ord k)
                => (v -> v -> v) -- ^ Conflict resolution function
                -> [k]           -- ^ Key
                -> Int           -- ^ Length of the key
                -> v             -- ^ Value
                -> TTree k v     -- ^ Tree
                -> TTree k v
    insertWith' f k1@(k:kt) h v t =
      case t of
        TTNil ->
          insertWith' f k1 h v $ TNode {
              _key = k
            , _eq = TTNil
            , _left = TTNil
            , _right = TTNil
            , _val = Nothing
            , _height = h
            }
        node@TNode{_key=k0, _height=h0, _val=v0, _eq=eq0, _left=left0, _right=right0} ->
          case compare k0 k of
            EQ | null kt ->
                   node {
                     _val = Just $ maybe v (flip f $ v) v0
                   }
               | True ->
                   node {
                     _eq = insertWith' f kt (h-1) v eq0
                   , _height = max h h0
                   }
            GT ->
               node {
                 _left = insertWith' f k1 h v left0
               , _height = max h h0
               }
            LT ->
               node {
                 _right = insertWith' f k1 h v right0
               , _height = max h h0
               }
    {-# SPECIALIZE insertWith' :: (v -> v -> v) 
                               -> [Char] 
                               -> Int
                               -> v 
                               -> TTree Char v
                               -> TTree Char v
      #-}

    а почему бы не использовать несбалансированное тернанрое дерево для индекса
    вроде ничего стра
    Out of memory: Kill process 2987 (govno) score 265 or sacrifice child

    Запостил: CHayT, 25 Мая 2016

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

    • *тернарное
      Ответить
    • Так не хватило памяти из-за того, что каждый нод жрёт слишком много места, или же проблема именно в том, что дерево несбалансированное, и каждая вставка реаллицирует слишком много нодов?
      Ответить
    • на хаскеле говнокодов почти не пишут. видно по кол-ву их на сайте 7
      Ответить
      • > на хаскеле говнокодов почти не пишут. видно по кол-ву их на сайте 7
        на хаскеле почти не пишут. видно по кол-ву их на сайте 7
        FTFY
        Ответить
    • не завидую тому кто будет поддерживать этот код впоследсвии, ведь k и v f t совсем не читабельные односимвольные хрени, и если там весь код такой то это трэш и угар
      Ответить
      • Вы , должно быть , не часто пишете на хаскелле?
        Ответить
        • вообще ниразу ))) у мня в основном шарп, даже если это норма для хаскеля, это не отменяет того факта что читабельность, а как следствие поддержка такого кода снижена
          Ответить
      • https://en.wikipedia.org/api/rest_v1/media/math/render/svg/c6ee7d0cd1f1b75d96591ec492b146125b5846ff

        не завидую тому кто будет поддерживать этот код впоследсвии, ведь m и h совсем не читабельные односимвольные хрени, и если там весь код такой то это трэш и угар
        Ответить
        • В том то все и дело, что "универсальный математический язык" - универсальное говно, с какой стороны ни посмотри. Куча бесполезных, дублирующихся правил, нихера не понятные закорючки, которые даже специалисты не знают как читать. Самый большой процент ошибок при наборе - в математических формулах, просто даже при механическом копировании.
          Но человек, который с огромным трудом осилил это говно на 10% будет его защищать потому что это труд всей его жизни, а если этот труд вдруг окажется ненужным, то это ж депрессия и т.д.
          Ответить
          • Любой универсальный язык на поверку оказывается говном.
            Ответить
            • Почему?

              Вот, тут человек нормально подошел к вопросу: https://mitpress.mit.edu/sites/default/files/titles/content/sicm/book.html, и выбросил клинопись на помойку истории.
              Ответить
              • > помойка истории
                > (( ))) ()()()()()))(()))
                ну, если сесть в центр мусорного полигона и объявить всё пространство за его забором свалкой истории -- да, возможно
                Ответить
                • А что были сомнения что осиливший 10% клинописи будет вопить про то как эта клинопись неговно? У меня не было.
                  Ответить
        • https://en.wikipedia.org/api/rest_v1/?doc

          Что ж Вы раньше не говорили, Дринкинс, что у Вики есть такой API?
          Ответить
        • Кто, блядь, так уравнение Дирака пишет?
          Ответить
          • посмотри историю изменений вики странички и сам узнаешь, что как маленький
            Ответить
    • Зато строгие поля и pragma specialize.
      Ответить

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