Bei allen Speichertypen wird etwas an einem Punkt gespeichert und später abgerufen. Um dies in nur einer Operation zu tun, sollten Sie entweder automatisch speichern oder abrufen und die Position des gespeicherten Werts in der anderen Operation angeben.
Das heißt, Sie können zum expliziten Speichern einen Operator erstellen, um den n-ten berechneten Wert vor dieser Operation abzurufen, oder den aktuellen Wert nach n Operationen zurücksetzen. Alternativ können Sie die absolute Position vom Start des Programms an verwenden oder weitere Aktionen ausführen, z. B. das automatische Entfernen einiger Elemente nach bestimmten Vorgängen (z. B. in einem Stapel). Sie können auch mehrere Operatoren erstellen und mit oder ohne diese automatischen Vorgänge von verschiedenen Kopien des Speichers abrufen. Und Sie sollten versuchen, die maximale Anzahl, die für die Angabe in den Vorgängen erforderlich ist, angemessen klein zu halten, damit Sie für jede Nummer einen Operator zuweisen können.
In den meisten Fällen benötigen Sie jedoch nicht einmal einen Operator und die Sprache erledigt dies implizit. In diesem Fall müssen Sie ein standardisierteres Modell wie Stapel oder Warteschlangen in Betracht ziehen. Das bisher erfolgreichste schien die stillschweigende Programmierung zu sein, bei der nicht einmal die direkte Speicherung erwähnt wird.
Wenn Sie ein neues solches Modell entwerfen möchten, können Sie versuchen, die Auswertungen als Tag zu erweitern und sich einen Standardtag vorzustellen, wenn nichts anderes angegeben ist. Die Standardeinstellung ist höchstwahrscheinlich nur ein Baum, mit der Ausnahme, dass mehrere Blätter mit derselben Eingabe verknüpft sein können. Sie können beispielsweise eine Warteschlange für einen ausgeglichenen Baum oder einen Stapel für einen tiefen Baum verwenden, bei dem die Blätter meist konstant sind, oder Jelly für einen tiefen Baum, bei dem die Blätter meist Kopien der Eingabe sind.
Beachten Sie jedoch, dass Sie die Form eines Binärbaums in nur 2 Bits pro Operator codieren können. Wenn Ihre Sprache also weniger als 64 Operatoren enthält, können Sie die herkömmlichen Modelle ignorieren und einfach den gesamten Baum in die Ersatzbits kodieren (nennen Sie sie "Combine_parent" und "Below_leaf"). Selbst wenn es mehr Operatoren gibt, können Sie einen recht guten Standardwert (wie das Modell von Jelly) und drei Modifikatoren festlegen, um ihn zu ändern.
Sie könnten das gleiche Modell für die implizite und explizite Speicherung verwenden, müssen dies jedoch nicht. Beispielsweise könnten Sie einen Stapel für die implizite Speicherung verwenden, jedoch keine Elemente im expliziten Speicher (oder in einem anderen expliziten Speicher zusätzlich zum impliziten Speicher) einfügen. Es ist wahrscheinlich, dass es in der endgültigen Dokumentation nicht als Stapel bezeichnet wird, aber Sie haben die Idee.
Als Referenz ist die Größe der perfekten Kodierung eines Binärbaums der Logarithmus der katalanischen Zahlen . Und die Größe der perfekten Kodierung eines "binären" Tags ist der Logarithmus von A082161 , aber offensichtlich unpraktisch. Dies setzt voraus, dass ein Operator mit unterschiedlicher Argumentreihenfolge zwei verschiedene Operatoren hat und ein weiteres Bit hinzufügt, wenn dies nicht der Fall ist.
Manchmal möchten Sie vielleicht immer noch Variablen für die Schleifen. Möglicherweise können die Schleifen auf andere Weise neu geschrieben werden. Aber wenn Sie es wirklich brauchen, verwenden Sie kein 1-Byte-Konstrukt zusätzlich zu einem Namen, um die Variable zu definieren. Wenn Sie nicht nur die vorinitialisierten Werte verwenden, ist es normalerweise effizienter, ein 1-Bit-Flag zu verwenden, um anzugeben, ob Sie diese Variable lesen oder schreiben.