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

    +130

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    import Control.Arrow
    more_than_4_minimum_increased_to_100_from_list_of_pairs = 
      map fst >>>
      filter (>4) >>>
      minimum >>>
      (+100)
    
    main = do 
      let l = [(i,j) | i <- [2,4..7], j <- [2..i]]
      print l
      print $  more_than_4_minimum_increased_to_100_from_list_of_pairs l

    Игра:
    Есть один одинокий анон, который пытается написать на схемке аналогичный код. Но он никак не может найти в схеме генератор списков. Помоги маленькому анону найти путь в своей жизни. Антон - нея.

    Запостил: laMer007, 09 Апреля 2014

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

    • http://ideone.com/0LynZe
      Ответить
    • тебе тут нужны стрелки чтобы не писать точки?
      (+100) . minimum . filter (>4) . map fst
      Ответить
      • Неудобно в обратном порядке действия читать.
        Тот же Linq в этом плане удобнее:
        l.
        Select(x=>x.Value).
        Where(x=>x>4).
        Aggregate((l,r)=>l<=r?l:r) + 100;
        Ответить
        • Смотря как читать...
          «Прибавить сотню к минимуму из бо́льших 4 первых элементов списка пар».
          Но вообще соглашусь, это требует большого стека в мозъгу, и |> и >> из F# местами удобнее.
          Ответить
          • Приходится читать в обратном порядке, а не в прямом. Я не знаю тип, который вернул минимум, чтобы прибавить к нему сотню. Тут из-за сотни все просто, а если тут что-то посложнее например filter, то придется выводить тип из лямбды, а это не всегда удобно. Может быть список списков списков туплов в списке. В тоже время если читать в обратном порядке, то допустим у меня у функции more_than_4_minimum_increased_to_100_fro m_list_of_pairs есть сигнатурв и из типа её параметра я могу посмотреть какой тип получу после применения первой функции в последовательности вычислений.
            Я конечно могу это сделать и в нотации с точками, но это не удобно. Нужно сменить вид деятельности анализа типов на вид деятельности поиск конца выражения, если действия в перевернутом порядке. А если выражение сложное, многоскобочное и многоточечное, то это может затянуться. Что вообще говоря плохо и вытаскивает из потока. Хаскель тем и хорош, что держит в потоке надуманными причинами для размышлений
            Ответить
    • Хз. Схема (речь же про Схему?) тем и хороша, что там нет изкоробочных извращений со всякими встроенными недо- псевдо- мини-языками. Я так подозреваю, что знающий человек напишет макро, если сильно захочет, но в стандартной поставке этого не будет. За счет этого Схему можно использовать как встраиваемый язык, а Хаскелл - нет.
      Ответить
      • >ко ко ко Хаскелл - нет ко ко ко
        I get your point.
        Ответить
      • Спасибо. Я все передам анону. Впрочем я не уверен, что он умеет в макрофу схемы. Кстати, он кричал что все искоробки. :)
        Ответить
        • Although there is no standard list comprehension syntax in R5RS, many implementations provide an extension for this. For example, in Chicken Scheme:

          (require-extension list-of)
          Ответить

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