Comments 7
Статья интересная, спасибо.
Реализация стека (вернее, односвязного списка) с помощью стека вызовов — весьма известная техника функционального программирования. Кстати, не так давно была ещё одна статья на эту тему, с примерами на Scheme и Javascript: habrahabr.ru/post/176233/ В ней, правда, немного другая техника, но на мой взгляд очень похоже.
Реализация стека (вернее, односвязного списка) с помощью стека вызовов — весьма известная техника функционального программирования. Кстати, не так давно была ещё одна статья на эту тему, с примерами на Scheme и Javascript: habrahabr.ru/post/176233/ В ней, правда, немного другая техника, но на мой взгляд очень похоже.
+3
Эх, я поначалу подумал, вы написали некую обертку, которая позволяет удобно использовать стек текущего треда. А отдельный тред создавать, — это читерство ;)
ЗЫ вообще, afaik, функциональный стиль часто подразумевает агрессивное использование рекурсии, и как следствие — стека, как места для хранения данных, только делается это не явно, так что возможно вы пытаетесь изобрести велосипед
ЗЫ вообще, afaik, функциональный стиль часто подразумевает агрессивное использование рекурсии, и как следствие — стека, как места для хранения данных, только делается это не явно, так что возможно вы пытаетесь изобрести велосипед
+1
удобно использовать стек текущего треда
Возможно на макросах можно сделать. Но это будет на порядок сложнее.
А задачей была явная реализация именно хранения данных. Интересно прав ли я, что за счёт стека вызовов можно только стек реализоватью
0
Ну на двух стеках можно сделать очередь.
0
В теории — вполне можно и списки делать, только операции вставки не в конец — будут очень тяжелыми, — прийдется передвигать все данные ручками, и сложность на порядок возрастет ;) А так — главное завести ссылки в обьектах на обьекты находящиеся уровнем выше и ниже по стеку, — когда код идет рекурсивно «вглубь», — передавать ссылку на текущий элемент в рекурсивный вызов, а рекурсивный вызов, создав свой элемент — проинициализирует ссылку на вышестоящий, и в вышестоящем — обновит ссылку на «нижележащий». И тогда по списку в любой момент можно будет пройтись в оба направления, но вставка в середину — потребует создать элемент в конце, и путем копирования элементов, сдвинуть все на 1 позицию, что будет дорого.
0
Sign up to leave a comment.
Реализация стека за счёт … стека вызовов