Догоняет ли 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 ее уже решает, но как только речь зайдет об обработке ошибок, оповещении пользователей и т.п., то задачка из любимых для Никова этюдов превращается в занудное выписывание.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[6]: Догоняет ли Nemerle по лаконичности Haskell :)
От: VladD2 Российская Империя www.nemerle.org
Дата: 08.10.09 18:03
Оценка: 9 (1)
Здравствуйте, nikov, Вы писали:

N>Нет, просто Nemerle — это популярный на RSDN функциональный язык, и он, как и Haskell, славится своей способностью предоставлять программисту возможность записывать решения задач кратко и элегантно.


Собственно любой яызык который может называться "ФЯ" способен повторить код на другом языке практически 1 в 1. Были бы доступны соответствующие функции. Разница будет в основном мело-синтаксическая.

Я вообще не понимаю в чем смысл этой задачи?
Конечно она может напрячь мозг в поиске более оптимального решения, но язык тут совершенно не причем. Лично мне в хасклевских решениях больше мешает непривычность синтаксиса.

Кстати, в жизни я бы выбрал наиболее простой и эффективный вариант и не парился бы с его длинной. Посему варианты с применением комбинаторами были бы сразу отброшены.

Вот пример из совсем недалекого прошлого (позавчера дело было). Сел я писать поддержку синтаксиса EBNF к написанному WolfHound-ом генератору парсеров базирующемся на PEG/Packrat (код этого проекта можно посмотреть здесь).
Я конечно мог выбрать разные решения для реализации. Например, воспользоваться комбинаторным парсером а-ля хаскелвский Parsek (благо два варианта его реализации для немерле гуляют по стеи). Но такое решение будет заведомо боле медленное и более сложное). В итоге я тупо реализовал нисходящий рекурсивный парсер на локальных функциях (Parsing.n) который легко пишется, легко отлаживается и очень эффективно работает. Все про все заняло один вече (плюс пол ночи :) ).
На сегодня парсер может принимать грамматику в виде:
http://nemerle.googlecode.com/svn/nemerle/trunk/snippets/peg-parser/Test/Main.n
  [PegGrammar(sum, 
  grammar
  {
    any       = ['\u0000' .. '\uFFFF'];
    letter    = ['a' .. 'z'] / ['A' .. 'Z'] / '_';
    digit     = ['0' .. '9'];
    spaces    = ' '*;
    id        = letter (digit / letter)* spaces;
    num       = digit+ spaces;
    expr      = num / id / '(' spaces sum ')' spaces;
    sum       = expr ('+' spaces expr) spaces;
  })]
  class TestGrammar
  {
    ...
  }

т.е. в виде чистой (без допущений) EBNF-грамматики размещаемой в атрибуте Nemerle-кода.
И пусть какой-нить Хаскель попробует достичь той же выразительности и эффективности конечного результата.

В общем, мне важна не просто компактность записи, а некоторый набор факторов. Краткость в нем важный, но далеко не самый важный и уж точно не единственный фактор.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[7]: Догоняет ли Nemerle по лаконичности Haskell :)
От: WolfHound  
Дата: 08.10.09 18:54
Оценка: +1
Здравствуйте, VladD2, Вы писали:

VD>т.е. в виде чистой (без допущений) EBNF-грамматики размещаемой в атрибуте Nemerle-кода.

Строго говоря на EBNF данный синтаксис только немного похож.

Кстати в данную грамматику нужно добавить еще одно правило
start = spaces sum !any;

spaces в начале нужно чтобы грамматика допускала строки которые начинаются с пробелов.
!any нужно для того чтобы убедится что мы разобрали всю строку. В твоем варианте грамматика разберет только начало, а мусор в хвосте оставит и даже не пикнет.
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[7]: Догоняет ли Nemerle по лаконичности Haskell :)
От: VladD2 Российская Империя www.nemerle.org
Дата: 08.10.09 19:20
Оценка:
Здравствуйте, Аноним, Вы писали:

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

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

На здоровье: http://nemerle.org/Hacking (см. раздел Nemerle code style )

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

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

Я не понял чем тебя посмешила пара скобок, но меня точно посмешил object у функции которая ничего возвращать не должна.

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

А>Никакого стремления сделать код компактным у меня не было.

И почему не верится?

Кстати, я тут как-то читал одно сообщение
Автор: elmal
Дата: 20.08.09
. Мне в нем очень понравилась идея "не сказал бы, что тут все в одну строчку, строчка уж большо длинная, каждое из выражений для меня состоит из трех строчек. Эдак можно что угодно в одну строчку длиной 100 000 000 символов запихнуть, и разбирайтесь как хотите". ;)

А>Практически идет сопоставление строка на Nemerle — строка на C#.


Вот незадача, но почему тогда код на Nemerle прекрасно читается, а код на шарпе без пол литры не понять?
Может ты тогда еще хаскелевский пример на шарпе в том же стиле перепишешь? Потом вместо посмеемся.

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

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

"По шее" было в переносном смысле сказано. Любой вменяемый человек это понял бы. В прочем, вменяемый человек вообще вряд ли за топор хвататься стал бы.

А>Хотя конечно, посмешил очередной скрытый наезд на IT, теперь оказывается код на Nemerle не компактный. :)


После топора на адекватность рассчитывать уже не приходится. Хотя я несколько раз видел людей которые били весьма адекватны когда в жизни, и весьма неадекватны когда начинали выступать из под анонима. :)

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

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

А, ну, да. Хаскель во всем виноват. Точно!
А не покажешь мне тот код который он держал под глазами? А то я ни одного такого же решения на хаскле не видел.

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

А>Вы произвели глупый и немотивированный наезд на C#.

Я? Тебе показалось. Я сказал то что есть. Более того я как раз сказал, что на таком примитивном тесте и шарп будет выглядеть прилично. Сомневаешься, что есть случаи когда шарп будет выглядеть совсем плохо?

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


Данную задачу можно было бы написать куда лучше если бы шарп умел чуть больше чем он умеет. Не согласен?
На немерле можно повторить почти любую реализацию которую могут написать на хаскеле. У шарпа с этим будут огромные проблемы. Даже такую примитивщику как локальные рекурсивные функции и то чисто не воспроизвести. Грязь будет торчать из-зо всех дыр.

А>Хорошо хоть, необходимость макросов не упомянули.


Не, ну почем. Можно и их упомянуть. Например, ошибку в твоем коде можно было бы исправить, если бы был цикла repeat(n) block повторяющий block n раз. В немерле такого конечно нет, но есть возможность написать макрос. Что и было сделано в стандартной библиотеке. Без этой макры придется заводить лишние переменные и делать лишние проверки. Мелочь, конечно. Но из мелочей все и складывается.

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


Кому она стала очевидной то? Мне лично очевидно, что ты написал дерьмокод. И более чем очевидно, что в реальных проектах (если ты их пишешь) ты такой код не допустил бы (на юнца ты не похож). Так что написал этот дерьмокод ты с исключительно одной целью — хотя бы приблизиться к тому что написал IT и тем самым уличить меня во лжи.

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[7]: Догоняет ли Nemerle по лаконичности Haskell :)
От: VladD2 Российская Империя www.nemerle.org
Дата: 08.10.09 19:31
Оценка:
Здравствуйте, IT, Вы писали:

IT>Из описания и примера можно было вообще сделать вывод о том, что там всего два уровня, так что я даже перестарался.


Это претензия к Никову. Он задачку предлагал ведь.

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


Не, ну, так не честно!
Тогда ни "n > m" лишним было! Досточно было бы !=.

IT>У тебя? Не, у тебя длиннее на 4.5


Ух! Прямо дух захватывает.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[8]: Догоняет ли Nemerle по лаконичности Haskell :)
От: VladD2 Российская Империя www.nemerle.org
Дата: 08.10.09 19:33
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>Кстати в данную грамматику нужно добавить еще одно правило

WH>
WH>start = spaces sum !any;
WH>

WH>spaces в начале нужно чтобы грамматика допускала строки которые начинаются с пробелов.
WH>!any нужно для того чтобы убедится что мы разобрали всю строку. В твоем варианте грамматика разберет только начало, а мусор в хвосте оставит и даже не пикнет.

Да, точно. Ну, так добавил бы!
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[6]: Догоняет ли Nemerle по лаконичности Haskell :)
От: VladD2 Российская Империя www.nemerle.org
Дата: 08.10.09 19:34
Оценка: +1
Здравствуйте, nikov, Вы писали:

N>Нет, просто Nemerle — это популярный на RSDN функциональный язык, и он, как и Haskell, славится своей способностью предоставлять программисту возможность записывать решения задач кратко и элегантно.


А где же вариант для F#? Маэстро вы меня прямо разочаровываете.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: Догоняет ли Nemerle по лаконичности Haskell :)
От: kochetkov.vladimir Россия https://kochetkov.github.io
Дата: 08.10.09 22:37
Оценка:
Здравствуйте, quodum, Вы писали:

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


Не, ну если уж играть в злобных функциональщиков на питоне, то по полной программе:

import os, string

def f(x, y):
    return map(lambda x: x(),
        (lambda: os.chdir(
            x[0] == y[0] and '.' or
            x[0] <  y[0] and x[1] or
            x[0] >  y[0] and '../' * int((x[0] - y[0]) / 2)),
         lambda: os.mkdir(y[1]))) and y

reduce(f, [(0, '.')] + map(lambda x: (len(x) - len(x.lstrip()), x.lstrip()), (open('dir.txt', 'r').read().split('\n'))))




Q>PPS. А приятный этюдик вышел, если абстрагироваться от "пиписькомерства"


Ага

[Интервью] .NET Security — это просто
Автор: kochetkov.vladimir
Дата: 07.11.17
Re[6]: Догоняет ли Nemerle по лаконичности Haskell :)
От: kochetkov.vladimir Россия https://kochetkov.github.io
Дата: 08.10.09 22:37
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Не удивлюсь если хаскелевый isSpace ее уже решает


Точно решает. Он не только на пробелы true одает, AFAIK.

[Интервью] .NET Security — это просто
Автор: kochetkov.vladimir
Дата: 07.11.17
Re[6]: Догоняет ли Nemerle по лаконичности Haskell :)
От: kochetkov.vladimir Россия https://kochetkov.github.io
Дата: 08.10.09 22:37
Оценка:
Здравствуйте, nikov, Вы писали:

Ну вот, а я-то надеялся... Ну тогда, правда, хоть на F# решение бы посмотреть

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

VD>На здоровье: http://nemerle.org/Hacking (см. раздел Nemerle code style )

Судя по приведенному на данной странице стилю форматирования, код IT нарушает принципы в каждой своей строчке, начиная с #pragma indent.

VD>Я не понял чем тебя посмешила пара скобок, но меня точно посмешил object у функции которая ничего возвращать не должна.

Object у функции и должен был посмешить, так как это шутка (глум) в ответ на такой код => ().
Кому как, а для меня подобные выражения выглядят очень смешно.

VD>И почему не верится?

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

VD>Кстати, я тут как-то читал

Я и говорю, что идет перескок на тему компактности самой по себе.

VD>Вот незадача, но почему тогда код на Nemerle прекрасно читается, а код на шарпе без пол литры не понять?

Вот незадача, почему тогда код на С# прекрасно читается, а код на Nemerle вызывает смех?
Думаю, влияет, на чём чаще программирует, конкретный наблюдатель.

VD>Может ты тогда еще хаскелевский пример на шарпе в том же стиле перепишешь? Потом вместо посмеемся.

Хаскелем не владею. Да и не собираюсь, честно говоря.

VD>"По шее" было в переносном смысле сказано. Любой вменяемый человек это понял бы. В прочем, вменяемый человек вообще вряд ли за топор хвататься стал бы.

В отношении своей шеи шуток не понимаю. Как говорится, поучайте ваших паучат, а мою шею оставьте в покое.

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

Так в исходной теме, на которую есть ссылка в сообщении, немало примеров на Хаскеле.

VD>Сомневаешься, что есть случаи когда шарп будет выглядеть совсем плохо?

Вообще говоря, сомневаюсь. Уверен, шарп, в представляющих интерес случаях будет выглядеть, как минимум, приемлемо.

VD>Например, ошибку в твоем коде можно было бы исправить.

В который раз повторяю, что это не моя ошибка.

VD>Кому она стала очевидной то? Мне лично очевидно, что ты написал дерьмокод.

VD>В отличии о того говнокода что залудил ты чтобы что-то там доказать.
Это прямой порт с кода Nemerle. У вас что-то личное к IT?
Re[9]: Догоняет ли Nemerle по лаконичности Haskell :)
От: VladD2 Российская Империя www.nemerle.org
Дата: 09.10.09 18:54
Оценка:
Здравствуйте, Аноним, Вы писали:

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


VD>>На здоровье: http://nemerle.org/Hacking (см. раздел Nemerle code style )

А>Судя по приведенному на данной странице стилю форматирования, код IT нарушает принципы в каждой своей строчке, начиная с #pragma indent.

Да, ну? И где же это? Я углядел только однобуквенные индетификаторые которые и правда что были повзаимтвованы из хаскелевских исходников для которых пдобная грязь является нормой (к сожалению).
Не мог бы ты мне показать что же ты там углядел?

VD>>Я не понял чем тебя посмешила пара скобок, но меня точно посмешил object у функции которая ничего возвращать не должна.

А>Object у функции и должен был посмешить, так как это шутка (глум) в ответ на такой код => ().

Ну, посмешить ты конечно посмешил, то за шутку это не проканало.
Ну, а то что ты так поверзносно знаешь язык, что совершенно корректную конструкцию посчитал чем-то странным — это опять же говорит лишь о твоих знаниях. Тут стыдиться нужно, а не гордиться.

А>Кому как, а для меня подобные выражения выглядят очень смешно.


Лично мне смешным кажутся твои высказывания. "()" — это void-литерал. Применяется когда нужно указать, что выражение не должно ничего возвращать. То что ты не привык к таким вещам не означает, что это плохо. Такая штуковина (или ее аналог) есть во всех гибридных языках (позволяющих совмещать функциональный и императивный стили).

VD>>И почему не верится?

А>Не знаю, почему не верится. Цель была, как я уже писал, в конвертации кода строчка за строчкой с Nemerle на C#.
А>Никакого желания написать меньше по числу строчек чем на Nemerle не было.

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

VD>>Кстати, я тут как-то читал

А>Я и говорю, что идет перескок на тему компактности самой по себе.

От того что ты что-то говоришь — это не становится верным. Код написанный IT отлично читается и легко понимается теми кто привык к синтаксису языка на котором он написан. Даже ты, хотя явно видно что с ФЯ ты не на "ты" понял его суть. Попробуй понять хаскелевские примеры приведенные по ссылке. Думаю, что снос крыши тебе обеспечен. А те кто с хаскелем на "ты" понимаю тих довольно легко.

VD>>Вот незадача, но почему тогда код на Nemerle прекрасно читается, а код на шарпе без пол литры не понять?

А>Вот незадача, почему тогда код на С# прекрасно читается,

То что ты привел в последний раз? Да, не плохо. А первый — это говногод. Ну, да чтобы тебе понять, что он не аналогичен немерловому тебе придется пописать на оном языке хотя бы месяца 3.

А>а код на Nemerle вызывает смех?


Нет. Он вполне понятен и логичен.

А>Думаю, влияет, на чём чаще программирует, конкретный наблюдатель.


Я программирую на том и на другом примерно с одинаковой частотой (смешанные проекты).
В языках разная идеология. В шарпе код состоит из Stqtment-ов которые желательно выделять в коде ясной отбивкой. Тот же if может иметь else, а может не иметь. Если пренебрегать отбивкой, то не только читать код будет сложно, но и можно нарваться на серьезные неприятности. В nemerle же if — это выражение которое всегда имеет else. Если его не задать, будет сообщение об ошибке. Так что if немерла аналогичен тернарному выражения шарпа " _ : _ ? _ ". Но выражение может иметь тип void. Это делает его похожим на Stqtment в шарпе, но это только похожесть, так как весь контроль остается на месте и void-выражения подчиняются правилам выражений. Например, вот такая конструкция совершенно корреткна:
def x = if (true) WriteLine("test") else ();

хотя с "x" в дальнейшем будет невозможно что либо сделать, так как эта переменная имеет тип void.

Людям пишущим на С++ и шарпе по началу тяжело понять и тем более принять подобное. Но это очень удобно, так как нет разницы между выражениями и функциями. Например, try/finally так же может быть использован в выражениях и возвращать значение.

VD>>Может ты тогда еще хаскелевский пример на шарпе в том же стиле перепишешь? Потом вместо посмеемся.

А>Хаскелем не владею. Да и не собираюсь, честно говоря.

Владеть и не надо. Но понимать имеющиеся в нем концепции очень полезно.

А>В отношении своей шеи шуток не понимаю. Как говорится, поучайте ваших паучат, а мою шею оставьте в покое.


А кто у нас тут кого-то гнать из профессии то хотел?

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

А>Так в исходной теме, на которую есть ссылка в сообщении, немало примеров на Хаскеле.

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

VD>>Сомневаешься, что есть случаи когда шарп будет выглядеть совсем плохо?

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

ОК. С теорией построения компиляторов знаком? В курсе, что такое AST и как его обрабатывают на знакомых тебе языках?
Опиши, тогда в двух словах как бы ты описал AST простого калькулятора вычисляющего выражения и поддерживающего некоторый (примитивный) набор функций. Ну, и как потом по этому AST сделать такие вещи как форматированный вывод в строку и интерпретацию выражений.

А>Это прямой порт с кода Nemerle. У вас что-то личное к IT?


Прямой порт на язык где отсутствует ряд мощностей используемых в исходном коде невозможен.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[10]: Догоняет ли Nemerle по лаконичности Haskell :)
От: WolfHound  
Дата: 10.10.09 01:28
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Опиши, тогда в двух словах как бы ты описал AST простого калькулятора вычисляющего выражения и поддерживающего некоторый (примитивный) набор функций. Ну, и как потом по этому AST сделать такие вещи как форматированный вывод в строку и интерпретацию выражений.

Это все фигня. Пусть он вот это попробует повторить: http://code.google.com/p/nemerle/source/browse/nemerle/trunk/snippets/peg-parser/LRPEGCC/Optimizer.OptimizeRule.n
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[11]: Догоняет ли Nemerle по лаконичности Haskell :)
От: VladD2 Российская Империя www.nemerle.org
Дата: 10.10.09 11:07
Оценка:
Здравствуйте, WolfHound, Вы писали:

VD>>Опиши, тогда в двух словах как бы ты описал AST простого калькулятора вычисляющего выражения и поддерживающего некоторый (примитивный) набор функций. Ну, и как потом по этому AST сделать такие вещи как форматированный вывод в строку и интерпретацию выражений.

WH>Это все фигня. Пусть он вот это попробует повторить: http://code.google.com/p/nemerle/source/browse/nemerle/trunk/snippets/peg-parser/LRPEGCC/Optimizer.OptimizeRule.n

Чтобы ему повторить это, сначало ему нужно понять то, что есть варианты и паттерн матчинг. Так что ты не мешай. Пусть сначал ответит на первый вопрос, а тогда мы уже зададим и последующие. Все должно быть последовательно.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[10]: Догоняет ли Nemerle по лаконичности Haskell :)
От: Аноним  
Дата: 11.10.09 10:57
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Да, ну? И где же это? Я углядел только однобуквенные индетификаторые которые и правда что были повзаимтвованы из хаскелевских исходников для которых пдобная грязь является нормой (к сожалению).

VD>Не мог бы ты мне показать что же ты там углядел?
Я же явно указал — #pragma indent. А в Nemerle code style используются фигурные скобки.
Вот и очевидное нарушение.

VD>Ну, посмешить ты конечно посмешил, то за шутку это не проканало.

VD>Ну, а то что ты так поверзносно знаешь язык, что совершенно корректную конструкцию посчитал чем-то странным — это опять же говорит лишь о твоих знаниях.
Не скрывал, что знаю Nemerle поверхностно (чем, естественно, горжусь), хотя и не сказал бы, что на начальном уровне.
К тому же, знаю что такое () в Nemerle. Просто некоторые сочетания символов, выглядят смешно, даже если они совершенно корректны с точки зрения языка.

<=^=>
().()
\_=_/

VD>А кто у нас тут кого-то гнать из профессии то хотел?

Это в порядке самообороны, в том числе самообороны моей шеи.

VD>ОК. С теорией построения компиляторов знаком? В курсе, что такое AST и как его обрабатывают на знакомых тебе языках?

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

VD>Опиши, тогда в двух словах как бы ты описал AST простого калькулятора вычисляющего выражения и поддерживающего некоторый (примитивный) набор функций.

Да сто раз уже писал тут на Rsdn и на C# и на Java этот калькулятор.

VD>Прямой порт на язык где отсутствует ряд мощностей используемых в исходном коде невозможен.

И что за же за недоступные C# мощности были в данном коде?
Re[11]: Догоняет ли Nemerle по лаконичности Haskell :)
От: VladD2 Российская Империя www.nemerle.org
Дата: 11.10.09 14:02
Оценка:
Здравствуйте, Аноним, Вы писали:

VD>>ОК. С теорией построения компиляторов знаком? В курсе, что такое AST и как его обрабатывают на знакомых тебе языках?

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

Я не исхожу из этого, а спрашиваю.

VD>>Опиши, тогда в двух словах как бы ты описал AST простого калькулятора вычисляющего выражения и поддерживающего некоторый (примитивный) набор функций.

А>Да сто раз уже писал тут на Rsdn и на C# и на Java этот калькулятор.

Замечательно! Тогда ответь на вопрос. Как бы ты стал писать код разбора АСТ (сам вопрос в самом верху этого сообщения).
Можешь или пример кода привести, или просто назвать паттерн который ты будешь использовать, или описать на словах. Подробно описывать не нужно. Только саму суть подхода.

VD>>Прямой порт на язык где отсутствует ряд мощностей используемых в исходном коде невозможен.

А>И что за же за недоступные C# мощности были в данном коде?

А ты ответь на вопрос, тогда и я тебе отвечу.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[11]: Догоняет ли Nemerle по лаконичности Haskell :)
От: geniepro http://geniepro.livejournal.com/
Дата: 11.10.09 14:37
Оценка:
Здравствуйте, Аноним, Вы писали:

А>К тому же, знаю что такое () в Nemerle. Просто некоторые сочетания символов, выглядят смешно, даже если они совершенно корректны с точки зрения языка.


А><=^=>

А>().()
А>\_=_/

В подавляющем большинстве языков такое выражение вполне допустимо:
(Y)
Re[12]: Догоняет ли Nemerle по лаконичности Haskell :)
От: Аноним  
Дата: 13.10.09 14:25
Оценка:
Здравствуйте, VladD2, Вы писали:
VD>Замечательно! Тогда ответь на вопрос. Как бы ты стал писать код разбора АСТ (сам вопрос в самом верху этого сообщения).
VD>Можешь или пример кода привести, или просто назвать паттерн который ты будешь использовать, или описать на словах. Подробно описывать не нужно. Только саму суть подхода.
        static void Main(string[] args)
        {
            Expression expression1 = new Addition(new Number(10), new Multiplication(new Number(1), new Number(10)));

            System.Console.WriteLine(expression1 + " = " + expression1.Evaluate());

            Transformation replace = delegate(Expression expression)
            {
                var right = new AnyExpression();
                var pattern = new Multiplication(new Number(1), right);
                if (expression.Matches(pattern))
                    return new Addition(right.Match, pattern);
                return expression;
            };

            Expression expression2 = expression1.Transform(replace);
            System.Console.WriteLine(expression2 + " = " + expression2.Evaluate());
        }

Выводит:
10 + 1 * 10 = 20
10 + 10 + 1 * 10 = 30

Заменяет выражение вида 1 * x на 10 + 1 * x.
VD>А ты ответь на вопрос, тогда и я тебе отвечу.
Ваш ответ на этот вопрос мне неинтересен.
И так понятно, что в коде не использовались никакие сверхмощности Nemerle.
Так что с портом в C# проблем не было.
Re[13]: Догоняет ли Nemerle по лаконичности Haskell :)
От: VladD2 Российская Империя www.nemerle.org
Дата: 13.10.09 16:39
Оценка:
Здравствуйте, Аноним, Вы писали:

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

VD>>Замечательно! Тогда ответь на вопрос. Как бы ты стал писать код разбора АСТ (сам вопрос в самом верху этого сообщения).
VD>>Можешь или пример кода привести, или просто назвать паттерн который ты будешь использовать, или описать на словах. Подробно описывать не нужно. Только саму суть подхода.
А>
А>        static void Main(string[] args)
А>        {
А>            Expression expression1 = new Addition(new Number(10), new Multiplication(new Number(1), new Number(10)));

А>            System.Console.WriteLine(expression1 + " = " + expression1.Evaluate());

А>            Transformation replace = delegate(Expression expression)
А>            {
А>                var right = new AnyExpression();
А>                var pattern = new Multiplication(new Number(1), right);
А>                if (expression.Matches(pattern))
А>                    return new Addition(right.Match, pattern);
А>                return expression;
А>            };

А>            Expression expression2 = expression1.Transform(replace);
А>            System.Console.WriteLine(expression2 + " = " + expression2.Evaluate());
А>        }
А>

А>Выводит:
А>
А>10 + 1 * 10 = 20
А>10 + 10 + 1 * 10 = 30
А>


Я что-то не заметил ни кода предлагаемой реализации, ни объяснения как он должен работать.

А>Заменяет выражение вида 1 * x на 10 + 1 * x.

VD>>А ты ответь на вопрос, тогда и я тебе отвечу.
А>Ваш ответ на этот вопрос мне неинтересен.

Его не будет пока не будет внятного ответа на мой вопрос.

А>И так понятно, что в коде не использовались никакие сверхмощности Nemerle.

А>Так что с портом в C# проблем не было.

Кода собственно и нет. Да, будешь тролить снесу все твои сообщения. Тут уж пожалуйства без обид. Хочешь пообщаться, пожалуйста. Хочешь потролить ищи другие форумы. ОК?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[14]: Догоняет ли Nemerle по лаконичности Haskell :)
От: Аноним  
Дата: 13.10.09 17:27
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Я что-то не заметил ни кода предлагаемой реализации, ни объяснения как он должен работать.

Гм, а своё сообщение забыть уже успели? Тогда напоминаю:
Подробно описывать не нужно. Только саму суть подхода.

Я и поступил, согласно, предложению. А оказывается это была грубая ловушки, с целью стирать сообщения.

VD>Его не будет пока не будет внятного ответа на мой вопрос.

А мне и не надо, как я и написал.

VD>Кода собственно и нет. Да, будешь тролить снесу все твои сообщения. Тут уж пожалуйства без обид. Хочешь пообщаться, пожалуйста. Хочешь потролить ищи другие форумы. ОК?

Общаться, то есть рассуждать на достаточно широкие темы и переходя от одной к другой, малоинтересно.
Предпочитаю обмен мнениями по достаточно узкому вопросу.
Re[15]: Догоняет ли Nemerle по лаконичности Haskell :)
От: VladD2 Российская Империя www.nemerle.org
Дата: 13.10.09 17:37
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Гм, а своё сообщение забыть уже успели? Тогда напоминаю:

А>
Подробно описывать не нужно. Только саму суть подхода.

А>Я и поступил, согласно, предложению. А оказывается это была грубая ловушки, с целью стирать сообщения.

Ну, а где описание то? Я вижу какой-то невнятный код с вымешленными типами и методами про который ни слова не сказано.
Тебе нужно объяснить значение слова "описание"?

Пойми, я не могу апеллировать к вымышленному коду. Без описаний его можно слишком вольно трактовать.

VD>>Его не будет пока не будет внятного ответа на мой вопрос.

А>А мне и не надо, как я и написал.

ОК. Тогда закрыли разговор.

VD>>Кода собственно и нет. Да, будешь тролить снесу все твои сообщения. Тут уж пожалуйства без обид. Хочешь пообщаться, пожалуйста. Хочешь потролить ищи другие форумы. ОК?

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

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