Tutti i tipi di archiviazione comportano la memorizzazione di qualcosa in un punto e il recupero in un secondo momento. Per fare ciò in una sola operazione, è necessario eseguire la memorizzazione o il recupero automatico e specificare la posizione del valore memorizzato nell'altra operazione.
Cioè, per l'archiviazione esplicita, è possibile creare un operatore per recuperare l'ennesimo valore calcolato prima di questa operazione o ripristinare il valore corrente dopo n operazioni. In alternativa, è possibile utilizzare la posizione assoluta dall'inizio del programma o fare più cose come rimuovere alcuni elementi automaticamente dopo alcune operazioni (come in uno stack). È inoltre possibile creare più operatori, recuperando da diverse copie della memoria con o senza queste operazioni automatiche. E dovresti provare a rendere il numero massimo necessario per specificare nelle operazioni ragionevolmente piccolo, in modo da poter assegnare un operatore per ogni numero.
Ma nella maggior parte dei casi, non hai nemmeno bisogno di un operatore e la lingua lo farà implicitamente. Questo è quando è necessario considerare un modello più standardizzato come stack o code. Il più riuscito per ora sembrava essere la programmazione tacita, che non menziona nemmeno direttamente l'archiviazione.
Se si desidera progettare un nuovo modello di questo tipo, è possibile provare a espandere le valutazioni come dag e provare a pensare a un dag predefinito se non viene specificato nient'altro. Molto probabilmente, il valore predefinito è solo un albero, tranne per il fatto che più foglie possono essere collegate allo stesso input. Ad esempio, potresti usare una coda per un albero bilanciato, o una pila per un albero profondo dove le foglie sono per lo più costanti, o qualcosa come Jelly per un albero profondo dove le foglie sono per lo più copie dell'input.
Tuttavia, è possibile codificare la forma di un albero binario in soli 2 bit per operatore. Quindi, se la tua lingua ha meno di 64 operatori, puoi effettivamente ignorare i modelli tradizionali e codificare semplicemente l'albero completo nei bit di riserva (chiamali flags_parent e below_leaf). Anche se ci sono più operatori, potresti fare un default abbastanza buono (come il modello di Jelly) e 3 modificatori per cambiarlo.
È possibile utilizzare lo stesso modello per l'archiviazione implicita ed esplicita per comodità, ma non è necessario. Ad esempio, è possibile utilizzare uno stack per l'archiviazione implicita, ma non inserire elementi nella memoria esplicita (o in un'altra memoria esplicita oltre a quella implicita). È probabile che non verrà chiamato stack nella documentazione finale, ma avrai l'idea.
Per riferimento, la dimensione della codifica perfetta di un albero binario è il logaritmo dei numeri catalani . E la dimensione della codifica perfetta di un dag "binario" è il logaritmo di A082161 , ma ovviamente poco pratico. Questo presuppone un operatore con argomento diverso ordina due operatori diversi, aggiungendo un altro bit quando non lo è.
A volte potresti voler ancora variabili per i loop. Potrebbe essere possibile riscrivere i loop in altri modi. Ma se ne hai davvero bisogno, non usare un costrutto a 1 byte oltre a un nome per definire la variabile. a meno che non si utilizzino solo i valori preinizializzati, in genere è più efficiente utilizzare un flag da 1 bit per specificare se si sta leggendo o scrivendo questa variabile.