Войти
ФлеймФорумПрограммирование

Функциональщина, односвязные списки: обратный обход (3 стр)

Страницы: 1 2 3
#30
21:38, 27 апр 2010

ffinder
> например дано: ListNum
> надо получить: ListEven и ListOdd, данные должны быть в прямом порядке (не в перевернутом).
> зачем что-то изменять? просто читаем поэлементно начиная с конца, не генерируя перевернутый список.

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

Вершина дерева может иметь множество потомков, поэтому у неё даже нет конкретной версии, потому что она принадлежит сразу нескольким версиям списка. Эта особенность физического представления не позволяет элементу списка знать своего предшественника, т.к. в разных версиях списка этот предшественник разный.

Мне не известно как можно было бы реализовать двусвязный immutable список, в котором все стандартные операции работали бы за O(1). (Хотя я не много об этом знаю.)

#31
21:57, 27 апр 2010

id-alex
о! уже конкретика поперла.
можешь дать линки где ты эти хитрости вычитал? и про который из языков речь ведешь?

#32
23:37, 27 апр 2010

ffinder

Я не берусь утверждать, что CRT каких-то функциональных языков устроены именно так.
Я просто знаю про структуру данных „immutable список“. Нагуглил несколько ссылок по теме:
CodeProject с картинками
Wikipedia:en про «Singly-linked linear lists vs. other lists»
Что такое «Persistent data structure»

#33
13:02, 28 апр 2010

id-alex, спасибо за статьи. Многое прояснилось.

Я опичален, у языков c persistant (оно же immutable) структурами данных похоже нет никаких шансов догнать императивные с mutable. Overhead огромный, а практическая польза от него сомнительна. ИМХО, подход тупиковый. Никого не хотел обидеть, peace.

#34
13:44, 28 апр 2010

ffinder
> Я опичален, у языков c persistant (оно же immutable) структурами данных похоже
> нет никаких шансов догнать императивные с mutable. Overhead огромный, а
> практическая польза от него сомнительна. ИМХО, подход тупиковый. Никого не
> хотел обидеть, peace.

Неизменяемые структуры данных можно использовать для СУБД, например http://couchdb.apache.org/docs/overview.html

Из исследовательской работы (Zipper-based File System, http://okmij.org/ftp/Computation/Continuations.html#zipper-fs):

> we offer: transactional semantics; undo of any file and directory operation; snapshots; statically guaranteed the strongest, repeatable read, isolation mode for clients; pervasive copy-on-write for files and directories; built-in traversal facility; and just the right behavior for cyclic directory references

Еще говорят о том, что проблемы с параллельным программированием прямо-таки исчезают. См. Haskell (обзорная страничка: http://www.haskell.org/haskellwiki/Applications_and_libraries/Con… d_parallelism) и Erlang.

Прошло более 3 лет
#35
23:24, 29 янв 2014

innuendo
> разве нет в Haskell reverse для односвязных списков ?
Там основной языковой список односвязный.

#36
15:58, 30 янв 2014

DROnik
> Потому что они самые простые и быстрые
и их просто сделать потокобезопасными без блокировок. Полезность этих типов списков недооценивают и иногда просто не включают в стандартные либы, в .net пришлось писать свою реализацию. 10 строк, но всеравно не приятно)

#37
19:16, 30 янв 2014

ffinder
> Это вообще нормально? Как с этим люди живут в реальных условиях?
[green]
Они и не живут. Это ж разве жизнь?
Функциональщики - это своего рода нежить в мире программирования.
[/green]

#38
19:31, 30 янв 2014

Sbtrn. Devil
> Функциональщики - это своего рода нежить в мире программирования.
Покормлю.
А кто ж тогда эти, как их, жаболюбы, с их публичными неподвижными одинокими фабриками фасолин "Завод"?

#39
19:32, 30 янв 2014

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

#40
19:52, 30 янв 2014

TarasB
Граф, Тарас? Граф типа матрица? Связи: вверх, вниз, влево, вправо?

Sbtrn. Devil
> Они и не живут. Это ж разве жизнь?
Они затесываются в команды имперасов ... импетарасов ... императистов и плодят нечитаемый функциональный код в языках для этого не предназначенных. Их потуги выглядят весьма милыми. Особенно написание своей функциональной библиотеки. Вот у нас один такой пишет свою библиотеку акторов. Видимо Эрланга начитался.

kvakvs
> А кто ж тогда эти, как их ... жаболюбы
Зомби. Лидируют на рынке, заполняют всё пространство, очень раздуваются от мутаций от гордости.

#41
20:37, 30 янв 2014

Sbtrn. Devil
> Функциональщики - это своего рода нежить в мире программирования.
Куда хуже — люди, которые о функциональщине слышали только краем уха в своих страшных снах. Так скажешь случайно "лямбда", "замыкание", "свёртка"... и тут видишь яркую вспышку света и огненный гриб — сразу понятно, у человека бомбануло.

#42
21:10, 30 янв 2014

NightmareZ
> Куда хуже — люди, которые о функциональщине слышали только краем уха в своих
> страшных снах.

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

#43
1:21, 31 янв 2014

=A=L=X=
> функциональных языках
На минимум 10, не забывай.

Страницы: 1 2 3
ФлеймФорумПрограммирование

Тема в архиве.