Re[2]: [Nemerle] Обсуждение
От: VladD2 Российская Империя www.nemerle.org
Дата: 30.12.06 03:53
Оценка:
Здравствуйте, Алексей П, Вы писали:

АП>Очень хотелось бы иметь в стандартной библиотеке у класса list метод типа IterRest, ну и FoldRest — такие аналоги Iter и Fold, чтобы на каждой итерации передавался не только текущий элемент, но и оставшаяся часть списка.

АП>Вручную делается элементарно, но достало.

А что там делать то?

def f(_)
{
  | first :: rest => ... f(rest);
    | [] => ..
}

Быбо бы "полным П" если бы такие функции были в стандартной библиотеке.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: [Nemerle] Обсуждение
От: VladD2 Российская Империя www.nemerle.org
Дата: 30.12.06 03:53
Оценка:
Здравствуйте, PhantomIvan, Вы писали:

PI>дык это — кидай сюда код, и оно попадёт в библиотеку

PI>если конечно, компиляторщики не против
PI>я думаю они не против

Я уже против. Зачем это нужно?
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[4]: [Nemerle] Обсуждение
От: VladD2 Российская Империя www.nemerle.org
Дата: 30.12.06 03:53
Оценка:
Здравствуйте, Алексей П, Вы писали:

АП>Да не вопрос. Правда это скорее для размещения в Nemerle.Collections.List, но можно просто вызвать из list.

АП>Или переписать через цикл, а то хвостовой рекурсии не будет.

АП>
АП>public FoldRest[T, P](lst: list[T], acc: P, f: T * list[T] * P -> P): P
АП>{
АП>    match(lst)
АП>    {
АП>        | x :: xs => FoldRest(xs, f(x, xs, acc), f)
АП>        | _ => acc
АП>    }
АП>}

АП>public IterRest[T](lst: list[T], f: T * list[T] -> void): void
АП>{
АП>    match(lst)
АП>    {
АП>        | x :: xs => f(x, xs); IterRest(xs, f)
АП>        | _ => ()
АП>    }
АП>}
АП>


А какой в этом смысл?
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[6]: [Nemerle] Обсуждение
От: VladD2 Российская Империя www.nemerle.org
Дата: 30.12.06 03:53
Оценка:
Здравствуйте, Алексей П, Вы писали:

PI>>кидай докупы сюда IndexOf

АП>
АП>public IndexOf[T](elem: T): int
АП>{
АП>    mutable i = 0;
АП>    foreach(e in this)
АП>    {  
АП>        when(e.Equals(elem))
АП>            return i;
АП>        ++i;
АП>    }
АП>    -1
АП>}

АП>public IndexOf[T](f: T -> bool): int
АП>{
АП>    mutable i = 0;
АП>    foreach(e in this)
АП>    {  
АП>        when(f(e))
АП>            return i;
АП>        ++i;
АП>    }
АП>    -1
АП>}

АП>


АП>Но с первым вариантом может быть фигня.. изначально там было where T: object и e == elem : object


А чем так плохо:

public IndexOf[T](this sec : IEnumerable, f: T -> bool): int
{
    mutable i = 0;
        return : 
            foreach(elem in sec)
            {  
                    when(f(elem))
                            return(i);
                    ++i;
            }
        
    -1
}
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[4]: [Nemerle] Обсуждение
От: _nn_ www.nemerleweb.com
Дата: 30.12.06 07:09
Оценка:
Здравствуйте, VladD2, Вы писали:

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


VD>>>Проблем с дефолт-параметрами я тоже не вижу. И опять же если вдруг возникнет дикая необходимость генарацию методов можно сделать на макросах.


__>>Знаю, что можно.

__>>Но вот если бы этот макрос был бы в стандартной библиотеке языка

VD>... то было бы действительно ужасно.


А если этот макрос в Исходники запостить, попадет он в стандартную библиотеку ?
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[4]: [Nemerle] Обсуждение
От: PhantomIvan  
Дата: 30.12.06 08:46
Оценка:
PI>>дык это — кидай сюда код, и оно попадёт в библиотеку
PI>>если конечно, компиляторщики не против
PI>>я думаю они не против

VD>Я уже против. Зачем это нужно?


ну лана, вы тут обсудите, а потом мне сообщите
мне в принципе всё равно, будет оно в стандартной библиотеке или нет

как по мне, IterRest заслуживает добавления туда, неплохая функция
периодически возникает необходимость в таком проходе (как минимум, сделать Iter не по 1 элементу, а по 2 сразу — предыдущим и последующим)
ну, FoldRest вместе с ним, IndexOf действительно лучше, кажется к IEnumerable подмешивать
хотя можно и к списку

короче, мне все равно, поэтому, давайте думайте, а потом мне скажете
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[7]: [Nemerle] Обсуждение
От: Алексей П Россия  
Дата: 30.12.06 09:07
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>А чем так плохо:


VD>
VD>public IndexOf[T](this sec : IEnumerable, f: T -> bool): int
VD>{
VD>    mutable i = 0;
VD>        return : 
VD>            foreach(elem in sec)
VD>            {  
VD>                    when(f(elem))
VD>                            return(i);
VD>                    ++i;
VD>            }
        
VD>    -1
VD>}
VD>


Так даже лучше.
Re[5]: [Nemerle] Обсуждение
От: Алексей П Россия  
Дата: 30.12.06 09:07
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>А какой в этом смысл?


Иногда нужно сделать итер или фолд с заглядыванием вперед списка, типа, не содержится ли там что-то важное.
Re[3]: [Nemerle] Обсуждение
От: Алексей П Россия  
Дата: 30.12.06 09:07
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>А что там делать то?


VD>
VD>def f(_)
VD>{
VD>  | first :: rest => ... f(rest);
VD>    | [] => ..
VD>}
VD>


Ну да, именно так.

VD>Быбо бы "полным П" если бы такие функции были в стандартной библиотеке.


А чем плохо-то? Это же почти тот же итер, который в библиотеке есть, но тоже вручную делается элементарно.
Re[8]: [Nemerle] Обсуждение
От: Алексей П Россия  
Дата: 30.12.06 09:10
Оценка:
Нет, не лучше. Так неправильно. Зачем блок return поставил?
Re[5]: [Nemerle] Обсуждение
От: VladD2 Российская Империя www.nemerle.org
Дата: 30.12.06 22:47
Оценка:
Здравствуйте, _nn_, Вы писали:

__>А если этот макрос в Исходники запостить, попадет он в стандартную библиотеку ?


Я в этом смысла не вижу. Но если подобный макрос будет лежать в каком-нибудь пространстве имен, то никому он мешать не будет. Так что спроси на форуме по языку.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[6]: [Nemerle] Обсуждение
От: VladD2 Российская Империя www.nemerle.org
Дата: 30.12.06 22:47
Оценка:
Здравствуйте, Алексей П, Вы писали:

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


Неужели такие случаи так часты, что достойны вынесения в стандартные функции?

К тому же это будет поощрять писать непродуктивный код. Ведь заглядывание вперед замедляет код. Меж тем используя паттерн-матчинг в не универсальной фукнции можно получить оптимальный и красивый код. Ведь просто можно матчить сразу несколько значений списка.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[4]: [Nemerle] Обсуждение
От: VladD2 Российская Империя www.nemerle.org
Дата: 30.12.06 22:47
Оценка:
Здравствуйте, Алексей П, Вы писали:

АП>А чем плохо-то? Это же почти тот же итер, который в библиотеке есть, но тоже вручную делается элементарно.


Это не эффективное решение.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[6]: [Nemerle] Обсуждение
От: Андрей Хропов Россия  
Дата: 30.12.06 22:53
Оценка: +1
Здравствуйте, Алексей П, Вы писали:

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


VD>>А какой в этом смысл?


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


Возможно, в этом случае стоит подумать над более эффективным алгоритмом, а то попахивает O(n^2).
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[7]: [Nemerle] Обсуждение
От: Алексей П Россия  
Дата: 31.12.06 07:18
Оценка:
Здравствуйте, Андрей Хропов, Вы писали:

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


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


VD>>>А какой в этом смысл?


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


АХ>Возможно, в этом случае стоит подумать над более эффективным алгоритмом, а то попахивает O(n^2).


Ну да, O(n^2). Но при реальных n < 100 это как-то не очень важно. Хотя можно и оптимизировать.
Re[4]: [Nemerle] Обсуждение
От: _FRED_ Черногория
Дата: 11.01.07 19:45
Оценка:
Здравствуйте, PhantomIvan, Вы писали:

PI>а если я хочу первый параметр дефолтный, а остальные указать?


И такое можно?

синтаксис такой:
Method(, arg2);

... << RSDN@Home 1.2.0 alpha rev. 670>>
Now playing: «Тихо в лесу…»
Help will always be given at Hogwarts to those who ask for it.
Re[5]: [Nemerle] Обсуждение
От: PhantomIvan  
Дата: 11.01.07 20:07
Оценка: 7 (1)
PI>>а если я хочу первый параметр дефолтный, а остальные указать?

_FR>И такое можно?


_FR>синтаксис такой:

_FR>
Method(, arg2);

_FR>

синтаксис с именованными параметрами (как в сишарпе на атрибутах)
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.