Двунаправленные списки и добавление в конец
От: Аноним  
Дата: 29.02.12 11:54
Оценка:
Есть в немерле аналог list двухнаправленный c match конца и начало элементов
Re: Двунаправленные списки и добавление в конец
От: Аноним  
Дата: 29.02.12 12:09
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Есть в немерле аналог list двухнаправленный c match конца и начало элементов


нечто похожее на списки Рефала
Re[2]: Двунаправленные списки и добавление в конец
От: Аноним  
Дата: 29.02.12 15:05
Оценка:
Здравствуйте, Аноним, Вы писали:

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


А>>Есть в немерле аналог list двухнаправленный c match конца и начало элементов


А>нечто похожее на списки Рефала


PushFront(x, a:list[T]):list[T]
{
   x::a
}

PushBack(x, a:list[T]):list[T]
{
 (x::a.Rev()).Rev()
}


Шутка Кстати вопрос по теме: операция a+b(а и b — списки в Nemerle) имеет линейную сложность, райт?
Re[3]: Двунаправленные списки и добавление в конец
От: Ziaw Россия  
Дата: 29.02.12 15:28
Оценка:
Здравствуйте, Аноним, Вы писали:

А>a+b(а и b — списки в Nemerle) имеет линейную сложность, райт?


    public Append[T] (x : list [T], y : list [T]) : list [T]
    {
      NList.RevAppend (NList.Rev (x), y)
    }

    public RevAppend[T] (x : list [T], y : list [T]) : list [T] {
      match (x) {
        | h :: t => RevAppend(t, h :: y)
        | [] => y
      }
    }


Сложность вроде линейная, но не шибко эффективно получается.
Re[4]: Двунаправленные списки и добавление в конец
От: Аноним  
Дата: 29.02.12 15:53
Оценка:
Z>Сложность вроде линейная, но не шибко эффективно получается.

Я к тому — плохо, что линейная. Однонаправленные списки можно и нужно конкатенировать за константное вермя.
Re[5]: Двунаправленные списки и добавление в конец
От: WolfHound  
Дата: 29.02.12 17:15
Оценка:
Здравствуйте, <Аноним>, Вы писали:

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

Как? Учти что списки не изменяемые.
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[6]: Двунаправленные списки и добавление в конец
От: Аноним  
Дата: 29.02.12 17:29
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>Здравствуйте, <Аноним>, Вы писали:


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

WH>Как? Учти что списки не изменяемые.

Ну да, забыл — там же копирование.
Re[3]: Двунаправленные списки и добавление в конец
От: VladD2 Российская Империя www.nemerle.org
Дата: 29.02.12 18:27
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Шутка :) Кстати вопрос по теме: операция a+b(а и b — списки в Nemerle) имеет линейную сложность, райт?


Нет. Зависит от длинны первого списка. Он весь будет пересоздан.

Для промежуточных вычислений лучше использовать List[T], если важна производительность.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re: Двунаправленные списки и добавление в конец
От: VladD2 Российская Империя www.nemerle.org
Дата: 29.02.12 18:28
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Есть в немерле аналог list двухнаправленный c match конца и начало элементов


Есть дотнетный. МП можно попытаться сэмулировать на базе паттернов расшериний.

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