Re[43]: Is C# becoming a functional language?
От: lomeo Россия http://lomeo.livejournal.com/
Дата: 14.02.07 12:48
Оценка:
Здравствуйте, Mirrorer, Вы писали:

M>Есть подозрение что народ хочет увидеть такое применение монад, которое даст преимущество по сравнению с традиционным подходом..

M>То есть без монад — гемморой. А вот с монадами..

Я их понимаю, это очень похвальное желание, но я то тут при чём?

Безгеморройного применения монад они не увидят — вот без паттернов код геморройней же не становится. Просто паттерны облегчают нам нахождения решения в типовых ситуациях, поскольку фиксируют их. То же самое и паттерн "монада".
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[5]: Монады от Вадлера. Часть 3
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 14.02.07 17:20
Оценка: +1 :)
Здравствуйте, Mirrorer, Вы писали:

VD>>К сожалению не всегда все очевидно m, a, s и т.п. просто сбивают с толка.

M>Эх.. Да, жаль сообщения редактировать нельзя.. Подправил бы. Но в целом не так уж важно.

Это хороший пример, почему на rsdn польтзователям нельзя редактировать сообщения. Ну подправил бы ты. А письмо Влада осталось. И кто потом это бы прочел, долго бы удивлялся о чем идет речь.
... << RSDN@Home 1.2.0 alpha rev. 675>>
AVK Blog
Re[6]: Монады от Вадлера. Часть 3
От: Cyberax Марс  
Дата: 14.02.07 17:31
Оценка: :)
AndrewVK wrote:
> M>Эх.. Да, жаль сообщения редактировать нельзя.. Подправил бы. Но в
> целом не так уж важно.
> Это хороший пример, почему на rsdn польтзователям нельзя редактировать
> сообщения. Ну подправил бы ты. А письмо Влада осталось. И кто потом это
> бы прочел, долго бы удивлялся о чем идет речь.
Поэтому надо хранить историю изменений и помечать к какой ревизии
относятся ответы.
Posted via RSDN NNTP Server 2.0
Sapienti sat!
Re[43]: Is C# becoming a functional language?
От: BulatZiganshin  
Дата: 14.02.07 18:16
Оценка:
M>Есть подозрение что народ хочет увидеть такое применение монад, которое даст преимущество по сравнению с традиционным подходом..
M>То есть без монад — гемморой. А вот с монадами..

Parsec?
Люди, я люблю вас! Будьте бдительны!!!
Re[7]: Монады от Вадлера. Часть 3
От: VladD2 Российская Империя www.nemerle.org
Дата: 14.02.07 19:08
Оценка:
Здравствуйте, GlebZ, Вы писали:

GZ>Стоп. Ты сам мне объяснял почему немерлавцам пришлось для реализации list comprehension залезть в компилятор. Попросю быть объективным.


Значит ты плохо слушал. Там используется $ который является очень перегруженным символом в Немерле. А сам list comprehension реализован в виде отдельного макроса.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[37]: Is C# becoming a functional language?
От: VladD2 Российская Империя www.nemerle.org
Дата: 14.02.07 19:08
Оценка:
Здравствуйте, deniok, Вы писали:

D>Маленькая поправочка — в Хаскелле это не так.


...Таким же образом мы могли бы определить Int (целые фиксированного диапазона) и Integer:
data Int = -65532 | ... | -1 | 0 | 1 | ... | 65532 –- ещё псевдо-код
data Integer = ... -2 | -1 | 0 | 1 | 2 ...
где -65532 и 65532 – это максимальное и минимальное целое фиксированного диапазона в данной реализации. Тип Int представляет собой существенно более широкое перечисление, чем Char, однако по-прежнему конечное! В противоположность этому псевдо-код для типа Integer предназначен для описания бесконечного перечисления.


Думаешь вольность автора?
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[38]: Is C# becoming a functional language?
От: BulatZiganshin  
Дата: 14.02.07 20:00
Оценка:
Здравствуйте, VladD2, Вы писали:

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


D>>Маленькая поправочка — в Хаскелле это не так.


VD>

...Таким же образом мы могли бы определить Int (целые фиксированного диапазона) и Integer:
VD>data Int = -65532 | ... | -1 | 0 | 1 | ... | 65532 –- ещё псевдо-код
VD>data Integer = ... -2 | -1 | 0 | 1 | 2 ...
VD>где -65532 и 65532 – это максимальное и минимальное целое фиксированного диапазона в данной реализации. Тип Int представляет собой существенно более широкое перечисление, чем Char, однако по-прежнему конечное! В противоположность этому псевдо-код для типа Integer предназначен для описания бесконечного перечисления.


VD>Думаешь вольность автора?



скорее демонстрация принципов работы "data". я такое и для паскаля видел

что касается встроенности в язык — то встроены только числовые литералы. остальное встроено в библиотеки и на дефиниции языка афаир никак не сказывается
Люди, я люблю вас! Будьте бдительны!!!
Re[8]: Монады от Вадлера. Часть 3
От: GlebZ Россия  
Дата: 15.02.07 07:27
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Значит ты плохо слушал. Там используется $ который является очень перегруженным символом в Немерле. А сам list comprehension реализован в виде отдельного макроса.

Однако факт остается фактом. Если средний пользователь захотел-бы реализовать list comprehension — то он бы этого не смог бы сделать. Так как нужно залезть в компилятор. Факт он такой, либо он есть, либо его нет. Нельзя быть чуть чуть беременным. Поэтому ты зря привел этот аргумент в пример.
Re[7]: Монады от Вадлера. Часть 3
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 15.02.07 09:17
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>Поэтому надо хранить историю изменений и помечать к какой ревизии

C>относятся ответы.

Надо. Кто б еще этим занялся.
... << RSDN@Home 1.2.0 alpha rev. 675>>
AVK Blog
Re[31]: Is C# becoming a functional language?
От: Andir Россия
Дата: 15.02.07 10:32
Оценка:
Здравствуйте, GlebZ, Вы писали:

GZ>Фактически, это теоретическая возможность построения оптимизатора по сравнению с которым оптимизаторы императивных языков — дети неразумные. И собственно к этому все и движется. Только там слишком много NP задач. Во многом, это похоже на ситуацию с оптимизацией SQL.


А есть немного ссылок на методы оптимизации в ФЯ?

C Уважением, Andir!
using( RSDN@Home 1.2.0 alpha rev. 652 ) { /* Работаем */ }
Re[8]: Монады от Вадлера. Часть 3
От: Cyberax Марс  
Дата: 15.02.07 11:32
Оценка:
AndrewVK wrote:
> C>Поэтому надо хранить историю изменений и помечать к какой ревизии
> C>относятся ответы.
> Надо. Кто б еще этим занялся.
Так открыли бы исходники — народ бы подтянулся, ИМХО.
Posted via RSDN NNTP Server 2.0
Sapienti sat!
Re[9]: Монады от Вадлера. Часть 3
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 15.02.07 11:46
Оценка: +1
Здравствуйте, Cyberax, Вы писали:

C>Так открыли бы исходники — народ бы подтянулся, ИМХО.


Сомневаюсь
... << RSDN@Home 1.2.0 alpha rev. 675>>
AVK Blog
Re[10]: Монады от Вадлера. Часть 3
От: Cyberax Марс  
Дата: 15.02.07 12:14
Оценка:
AndrewVK wrote:
> C>Так открыли бы исходники — народ бы подтянулся, ИМХО.
> Сомневаюсь
Ну так без исходников точно не потянутся.

Я бы лично немного помог родному RSDN. Просто я не вижу в чем такая
большая сложность в коде форума, в свое время я сам написал движок (на
С++ и CGI!), слегка подобный RSDN. Хотя может я чего-то и недооцениваю.
Posted via RSDN NNTP Server 2.0
Sapienti sat!
Re[11]: Монады от Вадлера. Часть 3
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 15.02.07 12:27
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>Я бы лично немного помог родному RSDN.


На шарпе? Тогда этот вопрос можно решить индивидуально

C> Просто я не вижу в чем такая

C>большая сложность в коде форума, в свое время я сам написал движок (на
C>С++ и CGI!), слегка подобный RSDN. Хотя может я чего-то и недооцениваю.

Дело не в сложности, дело в необходимости потратить массу времени и усилий.
... << RSDN@Home 1.2.0 alpha rev. 675>>
AVK Blog
Re[32]: Is C# becoming a functional language?
От: Sinclair Россия https://github.com/evilguest/
Дата: 15.02.07 14:01
Оценка:
Здравствуйте, Andir, Вы писали:

A>А есть немного ссылок на методы оптимизации в ФЯ?

http://www.google.com/search?q=functional+languages+optimization+research&amp;rls=com.microsoft:ru:IE-Address&amp;ie=UTF-8&amp;oe=UTF-8&amp;sourceid=ie7&amp;rlz=1I7GGLG
1.2.0 alpha rev. 655
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[33]: Is C# becoming a functional language?
От: Andir Россия
Дата: 15.02.07 14:08
Оценка:
Здравствуйте, Sinclair, Вы писали:

A>>А есть немного ссылок на методы оптимизации в ФЯ?

S>http://www.google.com/search?q=functional+languages+optimization+research&amp;rls=com.microsoft:ru:IE-Address&amp;ie=UTF-8&amp;oe=UTF-8&amp;sourceid=ie7&amp;rlz=1I7GGLG
S>)

Ну так сразу в научные статьи лезть я не хочу Страшно Конкретика от товарищей уже поинтересовавшихся темой интересна.

C Уважением, Andir!
using( RSDN@Home 1.2.0 alpha rev. 652 ) { /* Работаем */ }
Re[9]: Монады от Вадлера. Часть 3
От: VladD2 Российская Империя www.nemerle.org
Дата: 15.02.07 15:44
Оценка:
Здравствуйте, GlebZ, Вы писали:

GZ>Однако факт остается фактом. Если средний пользователь захотел-бы реализовать list comprehension — то он бы этого не смог бы сделать. Так как нужно залезть в компилятор. Факт он такой, либо он есть, либо его нет. Нельзя быть чуть чуть беременным. Поэтому ты зря привел этот аргумент в пример.


Не выдумывай. Вся реализация лежит в двух макросах. Все что делается в компиляторе — это разрешается неоднозначтьсть символа '$'. Если его заменить на любой друго, то проблем не будет. Сотсвбенно вот код:
http://nemerle.org/svn/nemerle/trunk/macros/Util.n
public module ListComprehensionHelper
{
    [Nemerle.Macros.Hygienic]
    public ExpandRange (inrange : PExpr, acc : PExpr) : option [PExpr]
    {
        match (inrange) {
            | <[ $pat in $[$first, $second .. $last] ]>
            | <[ $pat in [$first, $second .. $last] ]> =>
                Some (<[
                     mutable i = $first;
                     mutable delta = $second - i;
                     def last = $last;
                     mutable cond = if (delta < 0) i >= last else i <= last;             
                     def pre_last = unchecked (last - delta);
                     
                     when (delta < 0 && pre_last < last || delta > 0 && pre_last > last) // we overflowed
                         delta = -delta;
                         
                     while (cond) {
                         def $pat = i;
                         if (delta < 0) 
                             cond = i >= pre_last;
                         else 
                             cond = i <= pre_last;
                         unchecked (i += delta);
                         $acc;
                     }
                ]>)
                 
            | <[ $pat in $[$first .. $last] ]>
            | <[ $pat in [$first .. $last] ]> =>
                Some (<[
                     mutable i = $first;
                     def last = $last;
                     mutable cond = i <= last;
                     mutable pre_last = last;
                     unchecked (pre_last--); // can't use (last - 1) since 1 might change/widen type
                     def overflowed = pre_last > last;
                     while (cond) {
                         def $pat = i;
                         if (overflowed)
                             cond = i >= pre_last;
                         else
                             cond = i <= pre_last;
                         unchecked (i++);
                         $acc;
                     }
                ]>)

            | _ => None ()
        }
    }
}

macro ExpandListComprehension (params exprs : list [PExpr])
{
    def adder =
        <[
             def cell = $(exprs.Head) :: [];
             if (head == null) {
                 head = cell;
                 tail = cell;
             } else {
                 _N_skip_write_check (tail.tl) = cell;
                 tail = cell;
             }
         ]>;
         
    def loops =
        exprs.Tail.Rev ().FoldLeft (adder,
            fun (e, acc) {
                match (ListComprehensionHelper.ExpandRange (e, acc)) {
                    | Some (expr) => expr
                         
                    | None =>
                        match (e) {
                            | <[ $e1 in $e2 ]> =>
                                <[ foreach ($e1 in $e2) $acc ]>
                            | cond =>
                                <[ when ($cond) $acc ]>
                        }
                }
            });

    match (exprs) {
        | [<[ $second .. $last ]>] =>
            <[ $[ x | x in [$second .. $last]] ]>

        | [<[ $first ]>, <[ $second .. $last ]>] =>
            <[ $[ x | x in [$first, $second .. $last]] ]>
            
        | _ =>
            <[
                    mutable head = null;
                    mutable tail = null;
                    $loops;
                    if (head == null)
                        []
                    else
                        head
            ]>
    }
}
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[44]: Is C# becoming a functional language?
От: Mirrorer  
Дата: 15.02.07 17:35
Оценка: :)
Здравствуйте, BulatZiganshin, Вы писали:


BZ>Parsec?

Да вот копаю потихоньку. Какой-то он совсем уж малюсенький...
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[45]: Is C# becoming a functional language?
От: lomeo Россия http://lomeo.livejournal.com/
Дата: 15.02.07 18:52
Оценка:
Здравствуйте, Mirrorer, Вы писали:

BZ>>Parsec?

M>Да вот копаю потихоньку. Какой-то он совсем уж малюсенький...

О!
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[45]: Is C# becoming a functional language?
От: BulatZiganshin  
Дата: 15.02.07 19:41
Оценка:
Здравствуйте, Mirrorer, Вы писали:

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



BZ>>Parsec?

M>Да вот копаю потихоньку. Какой-то он совсем уж малюсенький...

поскольку народу мало, приходится писать кратко. у меня i/o библиотека со всеми видами извращений кил 200 заняла, кажется
Люди, я люблю вас! Будьте бдительны!!!
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.