1. Куча / Говнокод #12085

    +124

    1. 1
    2. 2
    3. 3
    4. 4
    main =do
            let b = 56
            let b = b+1
            print b

    Зачем есть возможность задавать переменные с однаковыми именами, если их использовать ниже всё равно нельзя?
    http://ideone.com/b1DGYF

    Запостил: LispGovno, 09 Ноября 2012

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

    • Как это нельзя, сам же используешь в print b.
      Ответить
    • А сделано так чтобы можно было описывать рекурсию.

      Кстати в ocaml поведение данного кода было бы интуитивным (переменная, объявленная в let, вступает в силу только после блока let), а чтобы сделать такой зависон пришлось бы написать let rec.
      Ответить
      • > чтобы можно было описывать рекурсию
        Точно. Те же парсеры, например. Это must-have фича.
        Ответить
        • А можно пример кода с чем-нибудь полезным на тему использования переменной в самой себе? Может как для написания goto или цикла или может полезнее?
          Ответить
          • Классический и нахуй никому не нужный пример:
            fibs = 0 : 1 : zipWith (+) fibs (tail fibs)
            А кроме генерации списков, походу, поюзать ни для чего не получится.
            Ответить
    • А ты хотел как в любимых императивноговняных языках?
      Ответить
      • Функциональный Тарас глядит на императивное говно свысока.
        Ответить
    • [color=blue]bormand[/blue] уже сказал, лишь добавлю:
      main = do b <- return 56; b <- return $ b + 1; print b
      Ответить
    • Всё во имя паттерн-матчинга:
      f 1 = 1
      f x = f (x - 1)


      К слову, b - это функция а не переменная.
      Ответить
    • Переменные? В моем хачкеле??
      Ответить
      • IORef, MVar, TVar, TMVar... Они незаметно пожирают хаскель изнутри, превращая его в императивное говно...
        Ответить
        • Это всего лишь доказывает, что любое императивное говно можно реализовать на чистом функциональном языке.

          А вот каррирование, чистоту, автоматическое распараллеливание, функции высшего порядка, алгебраические типы данных, паттерн-матчинг на императивном языке либо вообще не реализуются никак, либо через огромную волосатую жопу.
          Ответить
          • > Это всего лишь доказывает, что любое императивное говно можно реализовать на чистом функциональном языке.

            Оно там и не реализовано. Код на хаскеле кристально чист, и все что он делает - возвращает IO action рантайму. А рантайм, написанный на императивной сишечке делает всю грязную работу связанную с императивным говном.
            Ответить
          • >каррирование
            Не особо нужно. Да и кортежи есть много где.
            >чистоту
            Вообще не нужно.
            >функции высшего порядка
            не нужно
            >паттерн-матчинг
            Да в общем ничего сверхъестественного. Ассоциативного массива всегда хватало.

            >автоматическое раssпараллеливание
            Ну да, а то дебилы с всякими casами и блокировками мучаются. А парни-то не знают! Можно ведь всё автоматически!!!
            Проблема вот в чем. Допустим, у тебя 4 ядра - типично в наше время. Код хацкелиста работает медленней в 3-5 раза.
            В большинстве случаев чтобы уделать хацкель assпаралелить просто не нужно.

            PS На секономленом электричестве приготовишь себе борщ.
            Ответить
            • >>функции высшего порядка
              >не нужно
              >>паттерн-матчинг
              >Да в общем ничего сверхъестественного. Ассоциативного массива всегда хватало.
              ко ко ко
              С остальным согласен. Впрочем чистота нужна местами. (Атрибут/Аннотация функции, как чистой)
              Ответить
              • Ну вот объясни. Что такого важного и нужного в паттерн-матчинге?
                Что нельзя сделать по-быстрому руками, и без чего невозможно писать хороший код (а не те говнопримеры что в Куче).
                Ответить
                • >Что нельзя сделать по-быстрому руками?
                  Можно. Но зачем копаться в говне руками самому, если для этого есть наемные копатели паттерн-матчинг?
                  Ответить
            • А на кластер параллелить?
              Ответить
          • Можно, но зачем?
            Ответить
    • Ты злой человек. Украл у меня имя. Украл у меня идею. Что будет дальше? Украдешь у меня код? Да ты даже ни одного говнокода на лиспе не запостил. Минусунул.
      Ответить
      • Здрасти.
        Ответить
        • Блин, а я думал, что LispGovno и HaskellGovno - две стороны одной личности.
          Ответить
          • Лол, а я думал это твой бот. Ты пару раз перелогиниться забыл. Кроме тебя хаскель на ГК никто не знает.
            Ответить
          • Ага, двуликий анус.
            Ответить

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