Догоняет ли Nemerle по лаконичности Haskell :)
От: nikov США http://www.linkedin.com/in/nikov
Дата: 06.10.09 16:42
Оценка:
http://www.rsdn.ru/forum/decl/3558517.1.aspx

А на немерле слабо?
Re: Догоняет ли Nemerle по лаконичности Haskell :)
От: WolfHound  
Дата: 06.10.09 18:10
Оценка:
Здравствуйте, nikov, Вы писали:

N>А на немерле слабо?

Вот это решение переводится на немерле с точностью до имен функций и мелких синтаксических отличий
http://rsdn.ru/forum/decl/3558579.1.aspx
Автор: BulatZiganshin
Дата: 05.10.09
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re: Догоняет ли Nemerle по лаконичности Haskell :)
От: IT Россия linq2db.com
Дата: 06.10.09 19:03
Оценка: 3 (1) +4 :))) :)
Здравствуйте, nikov, Вы писали:

N>http://www.rsdn.ru/forum/decl/3558517.1.aspx

N>А на немерле слабо?

#pragma indent
using System;
using Nemerle.Collections;

def f(l, c, n, m)
  match (l)
    | "" :: t => f(t,c,n+1,m)
    | cs :: t =>
      if        (n > m) IO.Directory.SetCurrentDirectory(c)
      else when (n < m) IO.Directory.SetCurrentDirectory("..");
      IO.Directory.CreateDirectory(cs);
      f(t,cs,0,n)
    | []      => ()

f(IO.File.ReadAllText("dir.txt").Split().ToList(), "", 0, 0)

Вот это как раз то, что я называю мериться пиписьками. Не писюнами, как взрослые пацаны, и уж, конечно, не как настоящие мужики ху... простите... ну вы поняли, а именно пиписьками.
Если нам не помогут, то мы тоже никого не пощадим.
Re: Догоняет ли Nemerle по лаконичности Haskell :)
От: VladD2 Российская Империя www.nemerle.org
Дата: 07.10.09 16:36
Оценка:
Здравствуйте, nikov, Вы писали:

N>http://www.rsdn.ru/forum/decl/3558517.1.aspx


N>А на немерле слабо?


Чё, нашел пример на F# и решил предварительно народ помчать? ;)

ЗЫ

Задача к языку не имеет никакого отношения. Она чисто алгоритмическая. Посему зависит только от наличия подходящих функций и умения выстраивать алгоритм.

Ну, C# понятно сольет. Но только лишь потому, что в нем нет качественного вывода типов и локальных фукнций. А так и на нем можно было бы написать "компактный" вариант.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: Догоняет ли Nemerle по лаконичности Haskell :)
От: Аноним  
Дата: 07.10.09 21:14
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Ну, C# понятно сольет. Но только лишь потому, что в нем нет качественного вывода типов и локальных фукнций.

Скорее уж потому, что нет #pragma indent (хотя её по идее прикрутить тривиально)
А локальные функции и вывод типов для такой задачи и не нужны.

using System.Linq;

class Program { 
    public static object f(string[] l, string c, int n, int m) {
        if (l.Length == 0) return null;
        if (l[0] == "") return f(l.Skip(1).ToArray(), c, n + 1, m);
        if (n > m) System.IO.Directory.SetCurrentDirectory(c);
        else if (n < m) System.IO.Directory.SetCurrentDirectory("..");
        System.IO.Directory.CreateDirectory(l[0]);
        return f(l.Skip(1).ToArray(), l[0], 0, n);
    }

    public static void Main(string[] arguments) {
        f(System.IO.File.ReadAllText("dir.txt").Split(), "", 0, 0);
    }
}
Re[3]: Догоняет ли Nemerle по лаконичности Haskell :)
От: VladD2 Российская Империя www.nemerle.org
Дата: 07.10.09 22:51
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Скорее уж потому, что нет #pragma indent (хотя её по идее прикрутить тривиально)

А>А локальные функции и вывод типов для такой задачи и не нужны.

Я тебя расстрою. Твой код не только ужасно выглядит, но он еще и не корректен.
У IT тоже есть ошибка, но она лечится проще.

А вообще, утрамбовывать код бессмысленно. То что код занял меньше месте не значит, что кода стало меньше. Писать надо так чтобы код легко читался. Тогда и ошибок будет меньше. Ну, и само собой тестировать код нужно более чем на доном случае.

На досуге поэкспериментируй с вот таким деревом:
Project
  Bin
  Lib
    External
  Src
    NamespaceA
      ABC
       AA
    NamespaceB
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re: Догоняет ли Nemerle по лаконичности Haskell :)
От: kochetkov.vladimir Россия https://kochetkov.github.io
Дата: 07.10.09 22:51
Оценка: 3 (1)
Здравствуйте, nikov, Вы писали:

N>http://www.rsdn.ru/forum/decl/3558517.1.aspx


N>А на немерле слабо?


А почему только на немерле?

import os, string

def func(i, l):
    os.mkdir(string.lstrip(l[0]))
    if (len(l) > 1):
        j = len(l[1]) - len(string.lstrip(l[1]))
        if j < i: os.chdir('..')
        elif j > i: os.chdir(string.lstrip(l[0]))
        func(j, l[1:])

with open('dir.txt', 'r') as f : func(0, string.split(f.read(), '\n'))



[Интервью] .NET Security — это просто
Автор: kochetkov.vladimir
Дата: 07.11.17
Re[4]: Догоняет ли Nemerle по лаконичности Haskell :)
От: Аноним  
Дата: 08.10.09 11:41
Оценка:
Здравствуйте, VladD2, Вы писали:


VD>Я тебя расстрою.

Я вас расстрою сильнее. Мой код просто переписан с кода на Nemerle.

VD>Твой код не только ужасно выглядит, но он еще и не корректен.

Код выглядит также как немерловый. Разница в единицах процентов.
Впрочем, я это понимаю, так что критиковать код IT Владу было боязно, поэтому решил покритиковать код анонима.

VD>У IT тоже есть ошибка, но она лечится проще.

Вылечите, а мы посмотрим.

VD>А вообще, утрамбовывать код бессмысленно.

Советую перед тем как отвечать, все-таки попытаться понять, что именно вам хотят сказать.
В том числе и для Nemerle будет лучше если его апологеты, не будут допускать столь грубых ляпов в отношении C#.
Re[2]: Догоняет ли Nemerle по лаконичности Haskell :)
От: quodum  
Дата: 08.10.09 13:59
Оценка: 9 (1)
Здравствуйте, kochetkov.vladimir, Вы писали:

KV>А почему только на немерле?




import sys, os

iter_depth_name_pairs = ( (len(line) - len(line.lstrip()), line.strip()) for line in open(sys.argv[1]) )

stack = [(-1, ".")]
for (cur_depth, cur_name) in iter_depth_name_pairs :
    stack = filter(lambda (depth,_): depth < cur_depth, stack) + [(cur_depth, cur_name)]
    subdirs_list = zip(*stack)[1]
    os.mkdir(os.path.join(*subdirs_list))


PS. Я сначала написал это в 5 строчек, но по некотором размышлении добавил две "лишних" переменных для самодокументируемости.

PPS. А приятный этюдик вышел, если абстрагироваться от "пиписькомерства"
Re[5]: Догоняет ли Nemerle по лаконичности Haskell :)
От: VladD2 Российская Империя www.nemerle.org
Дата: 08.10.09 14:14
Оценка:
Здравствуйте, Аноним, Вы писали:

VD>>Я тебя расстрою.

А>Я вас расстрою сильнее. Мой код просто переписан с кода на Nemerle.

Я заметил. Жаль, что он не идентичен.

VD>>Твой код не только ужасно выглядит, но он еще и не корректен.

А>Код выглядит также как немерловый.

В исходном разве были какие-то отступы о приципов форматрования кода принятых в этом языке?
Или были какие-то извращения вроде задания object-а в качестве возвращаемого типа чтобы не писать пару лишних скобок?
Вот попытка сделать не компанктный код компактным и привела к полнешей грязи и нечитаемости кода.
За такой код в реальном проекте я бы по шее дал.

А> Разница в единицах процентов.


Разница в том что одни код читается, а другой превращен в полнешую грязь.

А>Впрочем, я это понимаю, так что критиковать код IT Владу было боязно, поэтому решил покритиковать код анонима.


А что там критиковать? Все что я могу покритиковать в коде IT — это его ошибка. Вместо when нужно было написать repeat(m — n). В остальном же его код отлично читается. Я бы написал его немного по другому, но это уже скорее дело вкуса.

VD>>А вообще, утрамбовывать код бессмысленно.

А>Советую перед тем как отвечать, все-таки попытаться понять, что именно вам хотят сказать.

А я как раз таки понял. Перепиши этот код по человечески и увидишь сколько лишнего в нем набралось.

А>В том числе и для Nemerle будет лучше если его апологеты, не будут допускать столь грубых ляпов в отношении C#.


Где ты ляпы то заметил? Твоя попытка что-то там продемонстрировать продемонстрировала рочно обратное.
Утрамбованный говногод намного хуже чем просто меньшая компактность, потому как это ГОВНОГОД!
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: Догоняет ли Nemerle по лаконичности Haskell :)
От: VladD2 Российская Империя www.nemerle.org
Дата: 08.10.09 14:44
Оценка:
Здравствуйте, quodum, Вы писали:

KV>>А почему только на немерле? :(


Наверно потому что форум такой.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[4]: Догоняет ли Nemerle по лаконичности Haskell :)
От: IT Россия linq2db.com
Дата: 08.10.09 14:57
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>У IT тоже есть ошибка, но она лечится проще.


Это не ошибка. В рамках постановки задачи всё летает как трофейный мессершмидт

Ну, а кто напишет вариант на более расширенную постановку, то я соглашусь с тем, что у него пиписька на два миллиметра длиннее.
Если нам не помогут, то мы тоже никого не пощадим.
Re[5]: Догоняет ли Nemerle по лаконичности Haskell :)
От: IT Россия linq2db.com
Дата: 08.10.09 15:10
Оценка:
Здравствуйте, Аноним, Вы писали:

VD>>Я тебя расстрою.

А>Я вас расстрою сильнее. Мой код просто переписан с кода на Nemerle.

Я тебя расстрою вообще нереально. C# является хорошим языком для написания бизнес приложений, но как язык для написания более менее сложной логики он сливает языкам с поддержкой ПМ как запорожец мерседесу. Но на такой пиписьковой задаче это не очень видно,
Если нам не помогут, то мы тоже никого не пощадим.
Re[5]: Догоняет ли Nemerle по лаконичности Haskell :)
От: VladD2 Российская Империя www.nemerle.org
Дата: 08.10.09 15:20
Оценка:
Здравствуйте, IT, Вы писали:

IT>Это не ошибка. В рамках постановки задачи всё летает как трофейный мессершмидт :))


Там явно было сказано "Есть текстовый файл, описывающий структуру каталогов с помощью отступов.".
Хотя конечно можно сказать, что это был не пример, а единственно возможный вариант. Но тогда зачем такие сложности? Захардкодить все на фиг и все! :)

IT>Ну, а кто напишет вариант на более расширенную постановку, то я соглашусь с тем, что у него пиписька на два миллиметра длиннее.


Тогда у меня будет аж на 4 милиметра :))
#pragma indent
using System;
using Nemerle.Collections;

def f(l, c, n, m)
  match (l)
    | "" :: t => f(t,c,n+1,m)
    | cs :: t =>
      if        (n > m) IO.Directory.SetCurrentDirectory(c)
      else repiat (m - n) IO.Directory.SetCurrentDirectory("..");
      IO.Directory.CreateDirectory(cs);
      f(t,cs,0,n)
    | []      => ()

f(IO.File.ReadAllText("dir.txt").Replase("\n", "").Replase("  ", " ").Split().ToList(), "", 0, 0)

и
using System.IO;
using Nemerle.Collections;

mutable m = 0, n = 0, c = "";
foreach (cs in File.ReadAllText(@"..\..\data.txt").Replace("\n", "").Replace("  ", " ").Split().ToList())
  if (cs == "") n++;
  else
  {
    if          (n > m) Directory.SetCurrentDirectory(c)
    else repeat (m - n) Directory.SetCurrentDirectory("..");
    _ = Directory.CreateDirectory(cs);
    (c, n, m) = (cs, 0, n);
  }
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[4]: Догоняет ли Nemerle по лаконичности Haskell :)
От: kochetkov.vladimir Россия https://kochetkov.github.io
Дата: 08.10.09 15:45
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, quodum, Вы писали:


KV>>>А почему только на немерле?


VD>Наверно потому что форум такой.


я имел ввиду "почему для сравнения лаконичности haskell'a был выбран именно немерл и, как следствие, этот форум?" т.к. nikov просто так спрашивать не будет, наверняка у него там что-то в рукаве припрятано

Кстати есть мнение, что если конкретизировать задачу до дьявола в мелочах (например, что отступы могут быть выражены не только пробелами, но и табами, а то и вообще использовать и то и другое как в одной строке, так и в разных, или что синтаксис файла с деревом не обязательно должен быть корректен), то задача становится не такой уж и тривиальной.

[Интервью] .NET Security — это просто
Автор: kochetkov.vladimir
Дата: 07.11.17
Re[5]: Догоняет ли Nemerle по лаконичности Haskell :)
От: nikov США http://www.linkedin.com/in/nikov
Дата: 08.10.09 15:49
Оценка:
Здравствуйте, kochetkov.vladimir, Вы писали:

KV>я имел ввиду "почему для сравнения лаконичности haskell'a был выбран именно немерл и, как следствие, этот форум?" т.к. nikov просто так спрашивать не будет, наверняка у него там что-то в рукаве припрятано


Нет, просто Nemerle — это популярный на RSDN функциональный язык, и он, как и Haskell, славится своей способностью предоставлять программисту возможность записывать решения задач кратко и элегантно.
Re[6]: Догоняет ли Nemerle по лаконичности Haskell :)
От: IT Россия linq2db.com
Дата: 08.10.09 16:01
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Там явно было сказано "Есть текстовый файл, описывающий структуру каталогов с помощью отступов.".

VD>Хотя конечно можно сказать, что это был не пример, а единственно возможный вариант. Но тогда зачем такие сложности? Захардкодить все на фиг и все!

Из описания и примера можно было вообще сделать вывод о том, что там всего два уровня, так что я даже перестарался. Добавить в пример вариант, при котором никаких вопросов бы больше не возникало заняло бы ровно одну строчку, тем более, что оно само напрашивается. Но автору это видимо было не нужно. Поэтому и результат такой же, на твёрдую троечку, а больше и не надо.

IT>>Ну, а кто напишет вариант на более расширенную постановку, то я соглашусь с тем, что у него пиписька на два миллиметра длиннее.

VD>Тогда у меня будет аж на 4 милиметра

У тебя? Не, у тебя длиннее на 4.5
Если нам не помогут, то мы тоже никого не пощадим.
Re[6]: Догоняет ли Nemerle по лаконичности Haskell :)
От: IT Россия linq2db.com
Дата: 08.10.09 16:03
Оценка: +1
Здравствуйте, VladD2, Вы писали:

VD>Тогда у меня будет аж на 4 милиметра


Кстати, у тебя отступы забиты жёстко на два пробела. Один миллиметр отрезаем
Если нам не помогут, то мы тоже никого не пощадим.
Re[6]: Догоняет ли Nemerle по лаконичности Haskell :)
От: Аноним  
Дата: 08.10.09 16:16
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Я заметил. Жаль, что он не идентичен.

Настолько сильно расстраивать, я, конечно, не планировал.

VD>В исходном разве были какие-то отступы о приципов форматрования кода принятых в этом языке?

Не могли бы привести страницу на сайте nemerle.org, озаглавленную "Принципы форматирования кода на Nemerle"?

VD>Или были какие-то извращения вроде задания object-а в качестве возвращаемого типа чтобы не писать пару лишних скобок?

Это как раз был тонкий глум над парой скобок в конце match.
Очень эта пара скобок меня посмешила, не мог не оттоптаться.

VD>Вот попытка сделать не компанктный код компактным и привела к полнешей грязи и нечитаемости кода.

Никакого стремления сделать код компактным у меня не было.
Практически идет сопоставление строка на Nemerle — строка на C#.
Хотя конечно, посмешил очередной скрытый наезд на IT, теперь оказывается код на Nemerle не компактный.

VD>За такой код в реальном проекте я бы по шее дал.

И получил бы в ответ промеж глаз. Топором. Не шутка.

VD>Разница в том что одни код читается.

VD>В остальном же его код отлично читается.
Код, кстати, ужасен, но я все-таки делаю скидку, что автор держал перед глазами код на Хаскеле.
Это многое объясняет.

VD>Где ты ляпы то заметил? Твоя попытка что-то там продемонстрировать продемонстрировала рочно обратное.

Вы произвели глупый и немотивированный наезд на C#.
А именно приплели необходимость сложного вывода типов и локальных функций для данной задачи.
Хорошо хоть, необходимость макросов не упомянули.
Когда же глупость данных требований к языку стала очевидной, попытались сменить тему, на то нужна ли компактность сама по себе.

VD>Перепиши этот код по человечески и увидишь сколько лишнего в нем набралось

Это так что ли по человечески?
using System.IO;
using Nemerle.Collections;

mutable m = 0, n = 0, c = "";
foreach (cs in File.ReadAllText(@"..\..\data.txt").Replace("\n", "").Replace("  ", " ").Split().ToList())
  if (cs == "") n++;
  else
  {
    if          (n > m) Directory.SetCurrentDirectory(c)
    else repeat (m - n) Directory.SetCurrentDirectory("..");
    _ = Directory.CreateDirectory(cs);
    (c, n, m) = (cs, 0, n);
  }

Да за такой код, надо просто выгонять из профессии, никакое битье по шее уже не поможет.
Надеюсь, только что разработка Nemerle ведется не в таком стиле.

Учитесь как надо:
class Program { 
    public static void Main(string[] arguments) {
        var previousName = "";
        var previousDepth = 0;

        foreach(var line in System.IO.File.ReadAllLines("names")) {
            var name = line.Trim();
            var depth = (line.Length - name.Length) / 2;

            if (depth > previousDepth)
                System.IO.Directory.SetCurrentDirectory(previousName);
            while (depth < previousDepth--)
                System.IO.Directory.SetCurrentDirectory("..");

            System.IO.Directory.CreateDirectory(name);

            previousName = name;
            previousDepth = depth;
        }
    }
}
Re[5]: Догоняет ли Nemerle по лаконичности Haskell :)
От: VladD2 Российская Империя www.nemerle.org
Дата: 08.10.09 17:43
Оценка:
Здравствуйте, kochetkov.vladimir, Вы писали:

KV>я имел ввиду "почему для сравнения лаконичности haskell'a был выбран именно немерл и, как следствие, этот форум?" т.к. nikov просто так спрашивать не будет, наверняка у него там что-то в рукаве припрятано :)


Наверно потому что только для немерла (из всех ФЯ) у нас есть отдельный форум.

KV>Кстати есть мнение, что если конкретизировать задачу до дьявола в мелочах (например, что отступы могут быть выражены не только пробелами, но и табами, а то и вообще использовать и то и другое как в одной строке, так и в разных, или что синтаксис файла с деревом не обязательно должен быть корректен), то задача становится не такой уж и тривиальной.


Так и есть. Проблема с таб/пробел решается элементарно. Не удивлюсь если хаскелевый isSpace ее уже решает, но как только речь зайдет об обработке ошибок, оповещении пользователей и т.п., то задачка из любимых для Никова этюдов превращается в занудное выписывание.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.