すべてのストレージタイプには、ある時点で何かを格納し、後でそれを取得することが含まれます。1つの操作のみでこれを行うには、自動的に保存または取得を行い、他の操作で保存された値の位置を指定する必要があります。
つまり、明示的なストレージの場合、この操作の前にn番目の計算値を取得する演算子を作成するか、n操作後に現在の値を戻すことができます。または、プログラムの最初から絶対位置を使用するか、いくつかの操作(スタック内など)の後にいくつかの要素を自動的に削除するなど、さらに多くのことを行うことができます。また、複数のオペレーターを作成して、これらの自動操作の有無にかかわらず、ストレージの異なるコピーから取得することもできます。また、操作で指定するのに必要な最大数を適度に小さくして、各数に1つの演算子を割り当てることができるようにする必要があります。
しかし、ほとんどの場合、演算子は不要であり、言語は暗黙的にこれを行います。スタックやキューなど、より標準化されたモデルを検討する必要がある場合です。今のところ最も成功しているのは暗黙のプログラミングであるように思われます。
新しいモデルを設計する場合は、評価をダグとして展開し、他に何も指定されていない場合はデフォルトのダグを考えてみてください。最も可能性が高いのは、複数のリーフが同じ入力にリンクされる場合があることを除いて、デフォルトは単なるツリーです。たとえば、バランスの取れたツリーにキューを使用したり、葉がほとんど一定である深いツリーにスタックを使用したり、葉がほとんど入力のコピーである深いツリーにゼリーのようなものを使用したりできます。
ただし、演算子ごとに2ビットのみでバイナリツリーの形状をエンコードできることに注意してください。そのため、言語の演算子が64個未満の場合、実際には従来のモデルを無視して、スペアビットで完全なツリーをエンコードするだけです(combined_parentフラグとbelow_leafフラグを呼び出します)。さらに多くの演算子がある場合でも、かなり良いデフォルト値(Jellyのモデルなど)とそれを変更するための3つの修飾子を作成できます。
便宜上、暗黙的および明示的なストレージに同じモデルを使用できますが、そうする必要はありません。たとえば、暗黙的なストレージにスタックを使用できますが、明示的なストレージ(または暗黙的なストレージに加えて別の明示的なストレージ)に要素をポップしないでください。最終ドキュメントではスタックと呼ばれない可能性がありますが、アイデアは得られます。
参考までに、バイナリツリーの完全なエンコーディングのサイズは、カタロニア語の数値の対数です。また、「バイナリ」DAGの完全なエンコードのサイズはA082161の対数ですが、明らかに非実用的です。これは、異なる引数順序を持つ演算子と2つの異なる演算子を想定し、そうでない場合は別のビットを追加します。
ループの変数が必要な場合があります。他の方法でループを書き換えることができる場合があります。ただし、本当に必要な場合は、変数の定義に名前に加えて1バイトの構造を使用しないでください。事前初期化された値のみを使用している場合を除き、通常、1ビットフラグを使用して、この変数の読み取りまたは書き込みを指定する方が効率的です。