Усі типи пам’яті передбачають збереження чогось в одному пункті та отримання його згодом. Щоб зробити це лише в одній операції, вам слід зробити або зберігання, або завантаження автоматично, а також вказати положення збереженого значення в іншій операції.
Тобто для явного зберігання ви можете створити оператора для отримання n-го обчисленого значення перед цією операцією або повернути поточне значення після n операцій. Крім того, ви можете використовувати абсолютну позицію з початку програми або робити інші речі, такі як автоматичне видалення деяких елементів після деяких операцій (наприклад, у стеку). Ви також можете зробити кілька операторів, витягуючи з різних копій сховища з цими автоматичними операціями або без них. І вам слід спробувати зробити максимальну кількість, необхідну для вказівки в операціях, досить малою, щоб ви могли призначити одного оператора для кожного номера.
Але в більшості випадків вам навіть не потрібен оператор, і мова зробить це неявно. Саме тоді потрібно розглянути більш стандартизовану модель, таку як стеки чи черги. На сьогодні найбільш вдалим виявилося негласне програмування, яке навіть не згадує безпосередньо про зберігання.
Якщо ви хочете розробити нову таку модель, ви можете спробувати розширити оцінки як даг і спробувати придумати даг за замовчуванням, якщо нічого іншого не вказано. Швидше за все, за замовчуванням є лише дерево, за винятком того, що кілька листків можуть бути пов'язані з одним входом. Ви можете, наприклад, використовувати чергу для збалансованого дерева, або стек для глибокого дерева, де листя переважно постійні, або щось на зразок желе для глибокого дерева, де листя - це переважно копії вхідних даних.
Але зауважте, що ви можете кодувати форму двійкового дерева лише у 2 бітах на оператора. Тож, якщо у вашій мові є менше 64 операторів, ви можете ігнорувати традиційні моделі і просто закодувати повне дерево у запасні біти (називайте їх комбінованими та прозорими прапорами нижче). Навіть якщо операторів більше, ви можете зробити досить непоганий за замовчуванням (наприклад, модель Jelly) та 3 модифікатори, щоб змінити його.
Ви можете використовувати ту саму модель для неявного та явного зберігання для зручності, але цього не потрібно. Наприклад, ви можете використовувати стек для неявного зберігання, але не поппонуйте елементи в явному сховищі (або в іншому явному сховищі на додаток до неявного). Ймовірно, це не буде називатися стеком у підсумковій документації, але ви отримаєте ідею.
Для довідки, розмір ідеального кодування бінарного дерева є логарифмом каталонських чисел . А розмір ідеального кодування "бінарного" дага - це логарифм A082161 , але, очевидно, недоцільно. Це передбачає, що оператор з різним порядком аргументів двох різних операторів, додаючи ще один біт, коли його немає.
Іноді, можливо, все ж потрібно змінних циклів. Можливо, можна переписати петлі іншими способами. Але якщо вам це справді потрібно, не використовуйте 1-байтну конструкцію на додаток до імені для визначення змінної. якщо ви не використовуєте лише попередньо ініціалізовані значення, зазвичай більш ефективно використовувати 1-розрядний прапор для визначення того, чи читаєте ви чи пишете цю змінну.