Здравствуйте, nikov, Вы писали:
N>А на немерле слабо?
Вот это решение переводится на немерле с точностью до имен функций и мелких синтаксических отличий http://rsdn.ru/forum/decl/3558579.1.aspx
#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 :)
Чё, нашел пример на 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 :)
Здравствуйте, Аноним, Вы писали:
А>Скорее уж потому, что нет #pragma indent (хотя её по идее прикрутить тривиально) А>А локальные функции и вывод типов для такой задачи и не нужны.
Я тебя расстрою. Твой код не только ужасно выглядит, но он еще и не корректен.
У IT тоже есть ошибка, но она лечится проще.
А вообще, утрамбовывать код бессмысленно. То что код занял меньше месте не значит, что кода стало меньше. Писать надо так чтобы код легко читался. Тогда и ошибок будет меньше. Ну, и само собой тестировать код нужно более чем на доном случае.
На досуге поэкспериментируй с вот таким деревом:
Project
Bin
Lib
External
Src
NamespaceA
ABC
AA
NamespaceB
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re: Догоняет ли Nemerle по лаконичности Haskell :)
Re[4]: Догоняет ли Nemerle по лаконичности Haskell :)
От:
Аноним
Дата:
08.10.09 11:41
Оценка:
Здравствуйте, VladD2, Вы писали:
VD>Я тебя расстрою.
Я вас расстрою сильнее. Мой код просто переписан с кода на Nemerle.
VD>Твой код не только ужасно выглядит, но он еще и не корректен.
Код выглядит также как немерловый. Разница в единицах процентов.
Впрочем, я это понимаю, так что критиковать код IT Владу было боязно, поэтому решил покритиковать код анонима.
VD>У IT тоже есть ошибка, но она лечится проще.
Вылечите, а мы посмотрим.
VD>А вообще, утрамбовывать код бессмысленно.
Советую перед тем как отвечать, все-таки попытаться понять, что именно вам хотят сказать.
В том числе и для Nemerle будет лучше если его апологеты, не будут допускать столь грубых ляпов в отношении C#.
Re[2]: Догоняет ли Nemerle по лаконичности Haskell :)
Здравствуйте, Аноним, Вы писали:
VD>>Я тебя расстрою. А>Я вас расстрою сильнее. Мой код просто переписан с кода на Nemerle.
Я заметил. Жаль, что он не идентичен.
VD>>Твой код не только ужасно выглядит, но он еще и не корректен. А>Код выглядит также как немерловый.
В исходном разве были какие-то отступы о приципов форматрования кода принятых в этом языке?
Или были какие-то извращения вроде задания object-а в качестве возвращаемого типа чтобы не писать пару лишних скобок?
Вот попытка сделать не компанктный код компактным и привела к полнешей грязи и нечитаемости кода.
За такой код в реальном проекте я бы по шее дал.
А> Разница в единицах процентов.
Разница в том что одни код читается, а другой превращен в полнешую грязь.
А>Впрочем, я это понимаю, так что критиковать код IT Владу было боязно, поэтому решил покритиковать код анонима.
А что там критиковать? Все что я могу покритиковать в коде IT — это его ошибка. Вместо when нужно было написать repeat(m — n). В остальном же его код отлично читается. Я бы написал его немного по другому, но это уже скорее дело вкуса.
VD>>А вообще, утрамбовывать код бессмысленно. А>Советую перед тем как отвечать, все-таки попытаться понять, что именно вам хотят сказать.
А я как раз таки понял. Перепиши этот код по человечески и увидишь сколько лишнего в нем набралось.
А>В том числе и для Nemerle будет лучше если его апологеты, не будут допускать столь грубых ляпов в отношении C#.
Где ты ляпы то заметил? Твоя попытка что-то там продемонстрировать продемонстрировала рочно обратное.
Утрамбованный говногод намного хуже чем просто меньшая компактность, потому как это ГОВНОГОД!
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: Догоняет ли Nemerle по лаконичности Haskell :)
Здравствуйте, Аноним, Вы писали:
VD>>Я тебя расстрою. А>Я вас расстрою сильнее. Мой код просто переписан с кода на Nemerle.
Я тебя расстрою вообще нереально. C# является хорошим языком для написания бизнес приложений, но как язык для написания более менее сложной логики он сливает языкам с поддержкой ПМ как запорожец мерседесу. Но на такой пиписьковой задаче это не очень видно,
Если нам не помогут, то мы тоже никого не пощадим.
Re[5]: Догоняет ли Nemerle по лаконичности Haskell :)
Здравствуйте, 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 :)
Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, quodum, Вы писали:
KV>>>А почему только на немерле?
VD>Наверно потому что форум такой.
я имел ввиду "почему для сравнения лаконичности haskell'a был выбран именно немерл и, как следствие, этот форум?" т.к. nikov просто так спрашивать не будет, наверняка у него там что-то в рукаве припрятано
Кстати есть мнение, что если конкретизировать задачу до дьявола в мелочах (например, что отступы могут быть выражены не только пробелами, но и табами, а то и вообще использовать и то и другое как в одной строке, так и в разных, или что синтаксис файла с деревом не обязательно должен быть корректен), то задача становится не такой уж и тривиальной.
Здравствуйте, kochetkov.vladimir, Вы писали:
KV>я имел ввиду "почему для сравнения лаконичности haskell'a был выбран именно немерл и, как следствие, этот форум?" т.к. nikov просто так спрашивать не будет, наверняка у него там что-то в рукаве припрятано
Нет, просто Nemerle — это популярный на RSDN функциональный язык, и он, как и Haskell, славится своей способностью предоставлять программисту возможность записывать решения задач кратко и элегантно.
Re[6]: Догоняет ли Nemerle по лаконичности Haskell :)
Здравствуйте, VladD2, Вы писали:
VD>Там явно было сказано "Есть текстовый файл, описывающий структуру каталогов с помощью отступов.". VD>Хотя конечно можно сказать, что это был не пример, а единственно возможный вариант. Но тогда зачем такие сложности? Захардкодить все на фиг и все!
Из описания и примера можно было вообще сделать вывод о том, что там всего два уровня, так что я даже перестарался. Добавить в пример вариант, при котором никаких вопросов бы больше не возникало заняло бы ровно одну строчку, тем более, что оно само напрашивается. Но автору это видимо было не нужно. Поэтому и результат такой же, на твёрдую троечку, а больше и не надо.
IT>>Ну, а кто напишет вариант на более расширенную постановку, то я соглашусь с тем, что у него пиписька на два миллиметра длиннее. VD>Тогда у меня будет аж на 4 милиметра
У тебя? Не, у тебя длиннее на 4.5
Если нам не помогут, то мы тоже никого не пощадим.
Re[6]: Догоняет ли Nemerle по лаконичности Haskell :)
Здравствуйте, 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 :)
Здравствуйте, kochetkov.vladimir, Вы писали:
KV>я имел ввиду "почему для сравнения лаконичности haskell'a был выбран именно немерл и, как следствие, этот форум?" т.к. nikov просто так спрашивать не будет, наверняка у него там что-то в рукаве припрятано :)
Наверно потому что только для немерла (из всех ФЯ) у нас есть отдельный форум.
KV>Кстати есть мнение, что если конкретизировать задачу до дьявола в мелочах (например, что отступы могут быть выражены не только пробелами, но и табами, а то и вообще использовать и то и другое как в одной строке, так и в разных, или что синтаксис файла с деревом не обязательно должен быть корректен), то задача становится не такой уж и тривиальной.
Так и есть. Проблема с таб/пробел решается элементарно. Не удивлюсь если хаскелевый isSpace ее уже решает, но как только речь зайдет об обработке ошибок, оповещении пользователей и т.п., то задачка из любимых для Никова этюдов превращается в занудное выписывание.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.