Pull to refresh

Comments 7

Статья интересная, спасибо.
Реализация стека (вернее, односвязного списка) с помощью стека вызовов — весьма известная техника функционального программирования. Кстати, не так давно была ещё одна статья на эту тему, с примерами на Scheme и Javascript: habrahabr.ru/post/176233/ В ней, правда, немного другая техника, но на мой взгляд очень похоже.
Эх, я поначалу подумал, вы написали некую обертку, которая позволяет удобно использовать стек текущего треда. А отдельный тред создавать, — это читерство ;)

ЗЫ вообще, afaik, функциональный стиль часто подразумевает агрессивное использование рекурсии, и как следствие — стека, как места для хранения данных, только делается это не явно, так что возможно вы пытаетесь изобрести велосипед
удобно использовать стек текущего треда

Возможно на макросах можно сделать. Но это будет на порядок сложнее.

А задачей была явная реализация именно хранения данных. Интересно прав ли я, что за счёт стека вызовов можно только стек реализоватью
Ну на двух стеках можно сделать очередь.
В теории — вполне можно и списки делать, только операции вставки не в конец — будут очень тяжелыми, — прийдется передвигать все данные ручками, и сложность на порядок возрастет ;) А так — главное завести ссылки в обьектах на обьекты находящиеся уровнем выше и ниже по стеку, — когда код идет рекурсивно «вглубь», — передавать ссылку на текущий элемент в рекурсивный вызов, а рекурсивный вызов, создав свой элемент — проинициализирует ссылку на вышестоящий, и в вышестоящем — обновит ссылку на «нижележащий». И тогда по списку в любой момент можно будет пройтись в оба направления, но вставка в середину — потребует создать элемент в конце, и путем копирования элементов, сдвинуть все на 1 позицию, что будет дорого.
Хм, кажется я понял идею. Надо будет попробовать.
Sign up to leave a comment.

Articles