Очереди и двойные очереди в луа

Страницы: Пред. 1 ... 22 23 24 25 26 След.
RSS
Очереди и двойные очереди в луа, Пример из книги Р.Е.
 
VPM, Тема:  Очереди и двойные очереди в луа
Ответ: Ни то, ни другое для решения задач торговли не нужны и должны быть отправлены на помойку.
Всё, тема исчерпана, вопрос закрыт.

Ах, Вы "обсуждаете вопросы для Вас не очень понятные". А я спрашивал: ну и как, обсудиЛИ хоть один? ПоняЛИ хоть что-нибудь? Сделали ХОТЬ ЧТО-НИБУДЬ в своём коде полезного по материалам этой ветки? Ответ "Да" не принимается: вопрос - ЧТО ИМЕННО?
.
Так я ВАС спрашиваю: "Если собрать в кучу всё полезное, что было высказано в этой тысяче с лишним постов, наберётся ли материала хотя бы на один"? ДЛЯ ВАС полезного? Ваша же ветка! Я уже показал вше, что тему можно закрытьь одной фразой. Ну, и где тут больная голова, а где здоровая?
 
Владимир, Я уже говорил, чтоб говорить о великом нужно понятия сделать общими (говорить на одном языке и понимать о чем разговор).

Начну с начала. Вот из последнего от великих:
Цитата
Glukator написал:
что именно мне станет понятно? Базовые вещи вроде стеков и очередей? =) Так я их с закрытыми глазами напишу на любом языке, а извращаться в lua, прикручивая "объектно-ориентированность" туда, где можно обойтись тремя функциями, точно не стану. Вам нравится - на здоровье.
Вас тут ничего не смущает?

Попробую пояснить что меня смущает. Уже неоднократно говорилось и разбиралось, что в луа единственная структура данных это таблица, таблица это половина ОПП,
а утверждение что этим не буду пользоваться, равно утверждению не понимаю как писать на луа!

или вот
Цитата
Glukator написал:
вы так говорите "модуль", как будто это какая-то волшебная таблетка. А это не более чем куча функций, вынесенная в отдельный файл.
Мне можно ошибаться я пришел разбираться,  а тем кто тут самоутверждается  с закрытыми глазами, стоит глаза открыть!
 
Цитата
Владимир написал:
Тема:  Очереди и двойные очереди в луаОтвет: Ни то, ни другое для решения задач торговли не нужны и должны быть отправлены на помойку.Всё, тема исчерпана, вопрос закрыт.
Вы сами то себя слышите, если все работают с таблицами как она может быть не нужна или закрыта?
 
VPM, Нет, у Glukator меня ничего не смущает. Более того, я подписываюсь почти под всеми его тезисами. Даже его подход с ключами-айдишками в стеке активных заявок заслуживает внимания, хоть я его и не принимаю. И я ещё в четвёртом своём комментарии на этом форуме 29.09.2020 10:31:16 писал: "В общем, с языком почти всё ясно: граф (точнее, дерево) объектов построить можно, а простейшую таблицу или даже массив - нельзя. Остаётся разобраться со строковыми переменными: способна ли эта loadstring интерпретировать строки как операторы языка (или, скажем, функции), то есть имеется ли здесь техническая возможность программирования данными."

Да, я прекрасно слышу и себя, и других. В названии темы нет ни слова про таблицы, там только про очереди.
 
Цитата
Владимир написал:
Да, я прекрасно слышу и себя, и других. В названии темы нет ни слова про таблицы, там только про очереди.
Не понял, а очереди где создаются? Там не только названия, там выложен пример, и в место того чтоб показать опытным товарищам , какие варианты можно собрать, где в каких случаях можно использовать,
на простых примерах, получаешь вот это все!

Цитата
Владимир написал:
Даже его подход с ключами-айдишками в стеке активных заявок заслуживает внимания, хоть я его и не принимаю.
У Фреймворк про который я здесь  рассказывал не однократно, это одна из ключевых идей, более того показывал! Да и любой может сам посмотреть.
Вот этот прием, но прежде чем им пользоваться trans_id создаются при инициализации.
Код
for trans_id, smartorder in pairs(SmartOrder.pool) do
        
        smartorder:process()
 
VPM, Очереди создаются там, где они нужны. Очередь - это FIFO, независимо от технической реализации. А про Роберто Иерусалимского я всё сказал ещё тыщу лет назад, его примеры  меня не интересуют - и ему и им место на помойке. И всем фреймворкам там же.
 
Цитата
Владимир написал:
И я ещё в четвёртом своём комментарии на этом форуме 29.09.2020 10:31:16 писал: "В общем, с языком почти всё ясно: граф (точнее, дерево) объектов построить можно, а простейшую таблицу или даже массив - нельзя. Остаётся разобраться со строковыми переменными: способна ли эта loadstring интерпретировать строки как операторы языка (или, скажем, функции), то есть имеется ли здесь техническая возможность программирования данными."
Ну я все таки приведу цитаты из книги, повторюсь, возможно кому то еще будут полезны и понятны подходы:

"Таблицы в Lua — это не одна из структур данных, — это единственная структура данных. Все структуры, которые предлагают другие языки, — массивы, записи, списки, очереди, множества — могут
быть представлены в Lua при помощи таблиц. Главное, таблицы Lua эффективно реализуют все эти структуры."

"Хотя мы можем реализовать массивы и списки при помощи таблиц Lua (и иногда мы это делаем), таблицы гораздо мощнее массивов и списков; многие алгоритмы с использованием таблиц становятся до банальности простым"

Последняя цитата хорошо подходит к примеру про индексацию trans_id.
 
Цитата
Владимир написал:
Очереди создаются там, где они нужны. Очередь - это FIFO, независимо от технической реализации
Зачем эти общие слова, кому они нужны? Да и с вопросом я маленько разобрался.
 
Цитата
Игорь М написал:
Цитата
VPM написал:
"Errare humanum est. Поэтому мы должны обрабатывать ошибки как можно лучше...
По вашему предыдущему вопросу в этой же книге есть пояснение: "Многие программисты пытаются писать нечто подобное: value = loadstring("return " .. varname)(). Если, скажем, varname равно x, то результатом конкатенации будет "return х", что при выполнении даст нам желаемый результат. Однако, этот код включает в себя создание и компиляцию нового куска кода, что является довольно затратным. Вы можете добиться того же эффекта при помощи следующего кода, который в десятки раз эффективнее предыдущего: value = _G[varname]".
Вот поднята тема, которая требует пояснений,
есть две записи:

1) value = loadstring("return " .. varname)()
2) value = _G[varname] -- в десятки раз эффективнее
 
Цитата
VPM написал:
Вот поднята тема, которая требует пояснений,
есть две записи:

1) value = loadstring("return " .. varname)()
2) value = _G[varname] -- в десятки раз эффективнее
А в чем здесь вопрос?
Первое это кодогенерация из произвольной строки. Второе прямое обращение к переменной. Естественно, что первое - это медленно, т.к. необходимо строку подготовить, скомпилировать текст в анонимную функцию и выполнить ее.

Я Вам советую изучить вопрос структур данных. Не в применении к языку Lua, а в общем. Языки разные, концепции одинаковые. Тогда у Вас отпадут многие вопросы по организации хранения, исполнения и т.д.
Форум это, конечно, хорошо, но фундаментальные знания получаются в библиотеке.
 
Nikolay, Ну первый вопрос зачем лезть в глобальное окружение, я видел у Вас такой прием?
 
Цитата
VPM написал:
Nikolay, Ну первый вопрос зачем лезть в глобальное окружение, я видел у Вас такой прием?
Это более сложный вопрос. Чаще всего с ним и работают, что вполне нормально для небольшого скрипта, выполняющего простые действия. А если скрипт - это десятки файлов и много строк, то так уже лучше не делать.
Причина банальна - очень легко допустить ошибку, переписав значение какой-то переменной. В этом плане, как я считаю, в Lua все должно быть наоборот - переменные должны быть локальными по смыслу, с блочной областью видимости. А глобальные создаваться специальным образом. Но как есть, так есть.

Поэтому я не использую глобальный контекст. Но его приходится использовать, если это методы и переменные из Qlua. Разработчики терминала все поместили в глобальный контекст. Поэтому и приходится к нему обращаться.
А для того чтобы это визуально различать и чтобы linter не выдавал ошибки, пишется _G, не более. Если бы интерфейс qlua был в библиотеке, например qlua, то было бы все лаконичней. Подключил библиотеку - получил методы и контекст терминала.
 
VPM, Да нет никаких таблиц в Lua! Название дурацкое, вот народ и ведётся. Здесь только наборы key-value. Таблица (в понимании РМД) это набор кортежей (ну или столбцов), а то, что называется здесь таблицей - это одноуровневое дерево даже для одного кортежа. А этот придурок расхваливает это говно потому, что это действительно единственная структура данных. А вкупе с этой грёбаной динамической типизацией, единственная структура элемента данных это строка. Нет там никакой эффективности ни на грош, и быть не может - сама идеология убогая.

Затем эти общие слова, кому они нужны, что 99% комментов на этом форуме посвящены тому, что нафиг никому не нужно - по крайней мере, ДЛЯ ДЕЛА.

Да мне насрать, что там "в этой же книге есть" - её писал малограмотный дурак! А loadstring, кастрированная уже "в моём присутствии" до load - это возможность программирования ДАННЫМИ! И про это я тоже писал ещё на заре своего появления здесь:
28.09.2020 09:20:15
УХ ТЫ! А в описании языка (руководство пользователя) нет ни звука ни про unpack, ни про loadstring! А эти вещи, как я предполагаю, должны бы расширять функциональные возможности совершенно диким образом!
02.10.2020 09:05:29
И Гугл ничего по этому запросу не находит, кроме парочки древних тем на этом самом форуме! Это же САМОЕ ВАЖНОЕ расширение функциональности языка! Как же так? Почему нет документации и где её взять?
 
Цитата
Nikolay написал:
Я Вам советую изучить вопрос структур данных. Не в применении к языку Lua, а в общем. Языки разные, концепции одинаковые. Тогда у Вас отпадут многие вопросы по организации хранения, исполнения и т.д.Форум это, конечно, хорошо, но фундаментальные знания получаются в библиотеке.
"Не в применении к языку Lua, а в общем", в общем мне не интересно, и зачем, дадут новый язык, буду с ним разбираться, а в луа структура данных это таблица, из которых все остальные строятся.
Да и пишу я строго для себя, а примеров на луа множество, вон игры как написаны!
 
Nikolay,  Ну все равно не понятно, _G таблица ну взять и локализовать под свою программу, или ее необходимые элементы? Я предполагаю что решаются еще вопросы видимости?

Ну или создал свою в корне дерева как Владимир, делает у себя, и обрабатывай.
 
Владимир,  Мы с Вами в своих подходах, пользуемся только луа, ну такой он, другого нет, так давайте подумаем что лучшее можно взять у него, как это эффективно можно применять!
 
Цитата
VPM написал:
Nikolay, Ну первый вопрос зачем лезть в глобальное окружение, я видел у Вас такой прием?
Поясняю.
Основной стек VMLua в КВИКЕ - это то, что вне функции main.
Функция main - создана как  coroutines  (вы это уже знаете) , но только в отдельном потоке.
--------------------
У main, как у  coroutines ,  есть доступ к переменных основной VMLua.
Этот доступ через глобальные функции.
Все библиотеки в том числе QLUA содержатся в глобальной таблице, поэтому к ним есть доступ из main,
но лишь как к глобальным.
-------------------
 
Хвалюсь. На начала сессии  6.39%  Сейчас шорт, но не закрыт.
Подробности на графике.
 
nikolz,  Ну вот видна цена, видны сделки, видно результат. Вы пишите это в виде индикатора, для одного инструмента?  
 
VPM, Я уже давным-давно взял всё лучшее и эффективно применил.
 
nikolz,  Здесь вопрос вот в чем, за чем здесь глобальная таблица со своим окружением

1) value = loadstring("return " .. varname)()
2) value = _G[varname] -- в десятки раз эффективнее -- в десятки раз эффективнее

Ну ведь можно  
local A={}                value = A[varname]
В двойной очереди он этот прием демонстрирует.
 
Цитата
VPM написал:

Ну ведь можно  
local A={}                value = A[varname]
В двойной очереди он этот прием демонстрирует.
Все будет зависеть где будет объявлена переменная А.
А так, конечно, можно. Но при этом надо не забывать, что эта А не будет видна в других файлах.А если нужна видимость, то чаще всего и решают это через глобальный контекст, что приемлимо, но значит, что это правильно. Хотя это субъективное понятие, конечно. Работает, устраивает, только для себя - значит правильно.
 
1.
Цитата
VPM написал:
"наделав кучу на голове у оппонента,  сидеть на ней, как на горе Эверест, со значимым видом"
 Довольно остроумное предложение по переименованию большей, но не лучшей части данной ветки  :smile:.

2.  
Цитата
VPM написал:
Здесь вопрос вот в чем, зачем здесь глобальная таблица со своим окружением
   Если внимательно читать автора, то в переводе на простой язык написано следующее.
  У скрипта существует внешняя служебная переменная с именем _ENV (доступная программисту).
  Все <переменные скрипта>, без спецификации local (называемые переменными окружения), семантически (по смыслу) эквивалентны: _ENV.<переменная скрипта>. То есть, предполагается, что значением _ENV может быть (вообще говоря, любая) таблица. По умолчанию при запуске скрипта, _ENV автоматически присваивается  глобальная служебная таблица _G (тип table), в которой первоначально хранятся стандартные функции Lua. Переменные окружения скрипта будут ключами этой таблицы.  Поэтому (если не присваивать _ENV таблицу отличную от  _G) запись в скрипте:  val = 1 эквивалентна следующей записи (_ENV.val =1) _G.val =1 или (_ENV['val'] =1) _G['val'] = 1.
 Если же не заморачиваться деталями реализации Lua, описанными выше, и не трогать _ENV , то достаточно понимать, что все переменные скрипта без спецификации local являются ключами некоторой служебной таблицы, и экзотическими способами обращения к таким переменным не пользоваться.
 
Цитата
TGB написал:
Если же не заморачиваться деталями реализации Lua, описанными выше, и не трогать _ENV , то достаточно понимать, что все переменные скрипта без спецификации local являются ключами некоторой служебной таблицы, и экзотическими способами обращения к таким переменным не пользоваться.
TGB, Если я ни чего не напутал, то подход максимальной локализации переменных, и по блочному их использованию, для таких пользователей как я оптимальный. И можно забыть про такое _G безболезненно для скрипта, поводом использования может я виться добиться необходимой видимости или есть еще повод?
 
Цитата
VPM написал:
подход максимальной локализации переменных, и по блочному их использованию, для таких пользователей как я оптимальный. И можно забыть про такое _G
 Да.
 
Цитата
VPM написал:
в луа единственная структура данных это таблица, таблица это половина ОПП,
а утверждение что этим не буду пользоваться, равно утверждению не понимаю как писать на луа!
Ага, а утверждение "не буду пользоваться молотком" тождественно "не понимаю, как забивать гвозди"?

Вы не читаете, что вам пишут, не воспринимаете аргументы, упрямо талдычите одно и то же про "профессора", "его пример", "демонстрацию приемов", описываете "возможности" и прочее, а потом еще и делаете логически ложные заявления (см. выше), объявляя их истинными. После чего обижаетесь, что кто-то здесь за ваш счет "самоутверждается" и вас не слушает.

Теперь к делу, о глобальных переменных. Вот, наберите в терминале lua пять строчек:
Код
_G["x"] = "aaaaa"
print(_G["x"])
-- (будет напечатано: aaaaa)
print(x)
-- (будет напечатано: aaaaa)

y = "bzzzzz"
print(_G["y"])
-- (будет напечатано: bzzzzz)
Т. е., как вам уже раньше писал Nikolay, обращение через _ׂG[] - это просто еще один способ обращаться к переменным из глобального контекста. И способ на редкость уродливый. Запись x = 1 выглядит гораздо лучше, чем _G["x"] = 1. Так что не стоит заморачиваться на тему "что бы нам с этой таблицей эдакого сделать", есть она - и хрен с ней. Забудьте, для дела она не нужна ни вам, ни мне, ни кому бы то ни было еще.
 
Еще раз Пересмотрел главу Окружение. Нашел. "Конечно, главной областью применения _ENV является изменение окружения, используемого фрагментом кода."  
TGB,  Спасибо.
 
VPM, я могу Вам предложить в качестве развлечения один проект https://github.com/kurapica/PLoop

Погрузитесь в крайнюю степень использования _ENV и все на чистом Lua.
Правда не ясно зачем, но, как говорится, красиво.

А по теме, я уже написал Вам, что стоит изучить вопрос коллекций как таковых. Чтобы не было вопросов где очереди, где стек, где дерево и т.д.
Для каждой задачи будет что-то свое.
 
Glukator,  Тот пример который Вы показываете,  связан с понятия свободных имен. А вопрос который обсуждается относится к применению  глобальных переменных с динамическими именами.
А Вопрос звучал в каких случаях нужны эти таблицы. На что в нескольких постах получен ответ.
 
Цитата
Glukator написал:
Ага, а утверждение "не буду пользоваться молотком" тождественно "не понимаю, как забивать гвозди"?
не буду пользоваться молотком, когда молоток в рука, а заколочу лбом! Почувствуйте разницу.
 
Nikolay,  Я уже отвечал у меня частная прикладная задача, ну если автор языка пишет двойная очередь, то причем здесь мои академические знания, я принимаю терминологию такой какой в нее заложен смысл автором. За ссылку спасибо посмотрю. Но я уже из беседы сделал ряд выводов для себя мне пока этого достаточно.  
 
Один тут разумный человек - Glukator, Ну, я ещё.
 
Цитата
VPM написал:
пример который Вы показываете,  связан с понятия свободных имен. А вопрос который обсуждается относится к применению  глобальных переменных с динамическими именами.
Брехня, такого вопроса никто не задавал.
Цитата
VPM написал:
не буду пользоваться, равно утверждению не понимаю как писать на луа!
<...>
не буду пользоваться молотком, когда молоток в рука, а заколочу лбом! Почувствуйте разницу
Конечно, разница очевидна. В первом случае делается ложное утверждение, что из "неиспользования" следует "незнание". Во втором случае вообще никакого утверждения не делается. Вы занимаетесь подменой смыслов, и это хреновая практика.

Давайте уже сместим обсуждение в область конкретных практических задач, а не каких-то эзотерических практик вроде "динамических имен", которые мало кому нужны вообще, а в автоматизации торговли в частности.
 
Glukator,  Ну а это что по Вашему.
Цитата
VPM написал:
1) value = loadstring("return " .. varname)()
2) value = _G[varname] -- в десятки раз эффективнее
Цитата
VPM написал:
В двойной очереди он этот прием демонстрирует.
Glukator,  Вы поймите я Вас не обидеть хочу, а показываю прямо то место где идет заблуждение, еще раз Луа  = таблица = ОПП, но если Вы используете таблицу , как можно можно не пользоваться ОПП, хотите Вы того или нет, мы эти пользуемся по умолчанию.

Вы опять пытаетесь определять кому что нужно, отвечайте за себя. Давайте про автоматизацию торговли, я только за!
 
Nikolay,  Ну Вы и пример привели, волосы дыбом от такого примера
Цитата
Nikolay написал:
VPM, я могу Вам предложить в качестве развлечения один проект  https://github.com/kurapica/PLoo pПогрузитесь в крайнюю степень использования _ENV и все на чистом Lua.Правда не ясно зачем, но, как говорится, красиво.
 
Посмотрел действительно все логично и просто:
Стек — это коллекция, элементы которой получают по принципу «последний вошел, первый вышел» (Last-In-First-Out или LIFO).
Это значит, что мы будем иметь доступ только к последнему добавленному элементу.

Очереди очень похожи на стеки. Они также не дают доступа к произвольному элементу, но, в отличие от стека, элементы кладутся (enqueue) и забираются (dequeue) с разных концов.
Такой метод называется «первый вошел, первый вышел» (First-In-First-Out или FIFO).
То есть забирать элементы из очереди мы будем в том же порядке, что и клали. Как реальная очередь или конвейер.

Прямо как складской учет.
 

Двусторонняя очередь (Double-ended queue), или дек (Deque), расширяет поведение очереди. В дек можно добавлять или удалять элементы как с начала, так и с конца очереди. Такое поведение полезно во многих задачах, например, планирование выполнения потоков или реализация других структур данных. Позже мы рассмотрим вариант реализации стека с помощью двусторонней очереди.

 
Glukator, Да какие уж тут "конкретные практические задачи". Одни придурки разные идиотские предложения по модификации Квика пишут - видимо, это их стараниями системный софт настолько изуродован. Вторые годами микросекунды ловят, третьи за каким-то хреном до  _G и _ENV докопались, четвёртые без ОПП жить не могут (острый параноидальный психоз, штоле?), пятые load пытаются присобачить для доступа к переменным, шестым очередь фиксированного размера подавай, седьмым... при этом ни одна собака не может внятно сказать, ЗАЧЕМ им вся эта хрень нужна.

VPM, О, Господи! НА КОЙ в скрипте очереди? Кому, где, когда понадобилось соблюдение очерёдности обработки хранящихся там элементов? Только один из моих стеков организован строго по LIFO, и только потому, что АБСОЛЮТНО ПОФИГ, какой элемент сейчас обрабатывать, а проще стека ничего не бывает. А двум другим НЕ пофиг, новые элементы заносятся тоже строго на вершину стека, а вот выдернуть их обработчики могут ЛЮБОЙ из них - первый, последний или любой другой из середины. И, если это не последний, скидывают на освободившееся место последний и декрементируют размер стека. Всё настолько просто, что НУ НЕЧЕГО здесь обсуждать! .
 
Владимир, Для особо одаренных. Повторюсь уже в сотый раз, для меня интересно знать возможности языка, как и где их можно применять. Для чего служит тот или другой прием.
Не зная возможности не сможешь применить! Пользователь решает чем ему пользоваться.
Такой подход называется конструирование. Все автомобили по своей структуре одинаковые (кузов, двигатель, шасси), пользовательские свойства разные.

Вот я же говорю подзабыли, "А двум другим НЕ пофиг, новые элементы заносятся тоже строго на вершину стека, а вот выдернуть их обработчики могут ЛЮБОЙ из них - первый, последний или любой другой из середины. И, если это не последний, скидывают на освободившееся место последний и декрементируют размер стека.
А почему это стало стеком  и где тут принцип LIFO. Я такие утверждения называю "горе от ума"!
 
Цитата
VPM написал:
я <...> показываю прямо то место где идет заблуждение, еще раз Луа  = таблица = ОПП, но если Вы используете таблицу , как можно можно не пользоваться ОПП, хотите Вы того или нет, мы эти пользуемся по умолчанию.
Очередная брехня. ООП - это стиль организации кода, и ничего больше. Использовать этот стиль или другой - решает программист. В lua ООП прикручивается через жопу: надо городить свои конструкты для классов, наследования и прочего. И вовсе не "Луа = таблица = ООП", вовсе нет. И никаких "использований по умолчанию" нет и быть не может.
Цитата
VPM написал:
Вы опять пытаетесь определять кому что нужно, отвечайте за себя.
Вы сказали, что не имеете отношения к программированию и спросили совета у более опытных людей - вам его дали: не лезьте в эзотерику, используйте простые решения, не надо усложнять. А вы в ответ, нет уж, я сам решу, что мне надо, а вы мне тут давайте читайте лекции. У попа был двор, на двору кол, на колу мочало, начинаем все сначала.
 
VPM, И я повторюсь уже в сотый раз, для особо одаренных: научитесь сначала применять БАЗОВЫЕ конструкции, которые есть В ЛЮБОМ языке программирования - их совсем немного: MOV, JMP, CALL, AND, OR, SUB, MUL и десяток других, и тогда освоите любой язык за пару часов. А если будете доставать левой ногой правое ухо, то не освоите ни один язык НИКОГДА. Узнать, для чего служит тот или другой приём можно лишь тогда, когда этот приём НУЖЕН КОНКРЕТНО В ВАШЕЙ ЗАДАЧЕ. Применять что-либо только потому, что есть такая возможность - это идиотизм, а никакое не "конструирование".

Ничего я не "подзабыл". Я тоже говорил где-то на границе тысячелетий: "Стек - это просто LIFO". А один очень умный программист меня поправил: "Просто LIFO - это магазин к АКМ". И мне пришлось вскоре в этом убедиться - как раз на "экзотике", когда на этапе компиляции количество и тип аргументов неизвестны не только вызываемой, но и вызывающей функции - тогда действительно приходится вытворять со стеком (ПРОГРАММНЫМ стеком!) такие манипуляции, которых нет ни в одном языке, кроме ассемблера и, естественно, ни в одном учебнике. А уж изворачиваться и выпендриваться в такой убогой прикладной задаче как торговля... Я такие трепыхания называю "онанизм".
 
Glukator,  Вы вроде хотели обсуждать торговые Задачи? ДА, за излишнею резкость извиняюсь.

Знание или не знания какого-то языка, ни как не влияют на умственные способности.
Про ОПП, на этих страницах я уже приводил авторов, выкладывал цитаты, откуда я делаю свой вывод. Если Вам нужно это оспорить обращайтесь к ним, со мной просто бессмысленно, либо приводите доводы опровергающие их утверждения.

Владимир,  Вы начинаете опять все запутывать, у стека есть четкое определение, при вашем подходе и очередь можно называть разновидность стека,
но ее называют очередью и дают четкое определение. Вот и двойная очередь оказывается широко известный подход.

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

"НУЖЕН КОНКРЕТНО В ВАШЕЙ ЗАДАЧЕ".
Я говорил что мне не нравится как моя программа обращается с памятью. Основная проблема это накопление массивов данных (в моем варианте таблиц).
Ну к примеру с частотой в 1 минуту получаю данные по свечам и индикаторам, складываю их в таблицу, которая за время сессии просто растет.
Для программы использующей портфель из тикеров, тайм фреймов, индикаторов(планирую переключаться между торговыми стратегиями внутри сессии) это расточительно!

Не знаю как назвать данный способ хранения но точно не стек, хоть и тарелочки из Вашего примера. Так как вся длинна этого массива не нужна (достаточно скажем 5 последних значения)
Нужен подход уменьшения количества элементов в таблицах  Я Вижу два подхода как организовать такую структуру:
1) После обработке 5 последних значений наставить nil;  bar[i][j][index-5].dec=nil;
2) Так как 1 вариант сильно похож на очередь то я вспомнил про двойную очередь из примера автора (которую не удалось обсудить и разобрать с первого поста)

И так задача сводится  к удобному универсальному методу уменьшения хранения данных в ОЗУ, по сути в моем представлении к организации ОЧЕРЕДИ!
 
Цитата
Владимир написал:
А уж изворачиваться и выпендриваться в такой убогой прикладной задаче как торговля...
Задача далеко не простая, просто Ваш подход в моей задаче - это только одна из торговых стратегий, торговую эффективность которой нужно еще проверять!
buy = a>b таких примеров полно в том числе и на этом форуме.
 
Цитата
VPM написал:
Знание или не знания какого-то языка, ни как не влияют на умственные способности.
Зато незнание базовых концепций ведет к неправильному пониманию смысла написанного. Вы нахватались цитат каких-то придурков, поняли их превратно, приняли свое неверное понимание за непреложную истину. Распинаться здесь, доказывая очевидные вещи (например, что lua НЕ является объектно-ориентированным языком), я не собираюсь - читайте книги (и не по lua, а по структурам данных в общем), поймете многое сами.
Цитата
VPM написал:
И так задача сводится  к удобному универсальному методу уменьшения хранения данных в ОЗУ, по сути в моем представлении к организации ОЧЕРЕДИ!
Ну вот опять... на колу мочало.
Цитата
Glukator написал:
Цитата
VPM написал:
сделать очередь ФИФО, для управления, передачи и обработки заданного количества элементов
Берете обычную очередь, и если добавление в нее очередного элемента должно привести к превышению заданной длины, то после добавления (или перед ним - как нравится) выбрасываете первый элемент.
Непонятно, чем вас не устраивает самое простое и самое очевидное решение.
 
Объясняю медленно  .
-----------------------
Для экономии памяти очередь вообще не причем.
В цифровой обработке сигналов нет даже такого понятия.
Для этой цели применяются сдвиговые регистры (массивы, вектора)
--------------------
Это КЛАССИКА в цифровой обработке  сигналов.
-------------------
Все фильтры и индикаторы строятся на циклических массивах.
------------------
 
 
Если Вы будете удалять первый при удалении последнего,
то это называется  СДВИГОВЫЙ РЕГИСТР, а не очередь.
 
опечатка ..
Если Вы будете удалять первый при добавлении последнего,
то это называется  СДВИГОВЫЙ РЕГИСТР, а не очередь.
 
В очереди нет синхронизации извлечения первого и добавления последнего.
Такая синхронизация в сдвиговых регистрах.
 
Учите терминологию, а не придумывайте  
 
Glukator,  Вот цитата что здесь не так?
Цитата
Структура с методами это простейший вариант объекта.
Метод это функция, сохраненная в элементе таблицы.
Когда я утверждал?
Цитата
Glukator написал:
Распинаться здесь, доказывая очевидные вещи (например, что lua НЕ является объектно-ориентированным языком), я не собираюсь - читайте книги (и не по lua, а по структурам данных в общем), поймете многое сами.
Я Вам напомнил что, таблица в луа это половина ОПП! Или и это тоже не верно.

Цитата
Glukator написал:
Непонятно, чем вас не устраивает самое простое и самое очевидное решение.
1) Как оказалось есть разные варианты как выбрасывать:
сдвигать очередь (table.remove)?
Вызывать сборщик (nil);
Либо, как в двойной очереди контролировать индексы, пере присваивая значения.

2) Универсальность "написал и забыл", где нужно поднял. Двойную я уже пробовал при обработке таблицы всех сделок, показала себя неплохо.
Я уже столько побросал скриптов из-за увеличивающейся сложности, частных решений, что принял свой подход писать модулями, замена одного не влияет на всю конструкцию, плюс оказалось еще и удобно и здесь таблица просто супер.
Страницы: Пред. 1 ... 22 23 24 25 26 След.
Читают тему
Наверх