모든 스토리지 유형에는 한 시점에 무언가를 저장하고 나중에 검색하는 것이 포함됩니다. 한 작업에서만이 작업을 수행하려면 자동으로 저장하거나 검색하고 다른 작업에서 저장된 값의 위치를 지정해야합니다.
즉, 명시적인 저장을 위해이 연산 전에 n 번째 계산 된 값을 검색하거나 n 연산 후에 현재 값을 되 돌리는 연산자를 만들 수 있습니다. 또는 프로그램 시작에서 절대 위치를 사용하거나 일부 작업 후 (예 : 스택에서) 일부 요소를 자동으로 제거하는 등 더 많은 작업을 수행 할 수 있습니다. 이러한 자동 작업 유무에 관계없이 여러 스토리지 사본에서 검색하여 여러 운영자를 만들 수도 있습니다. 또한 작업에 지정하는 데 필요한 최대 수를 합리적으로 작게 만들어 각 번호에 대해 하나의 연산자를 할당 할 수 있습니다.
그러나 대부분의 경우 연산자가 필요하지 않으며 언어가이를 암시 적으로 수행합니다. 이때 스택 또는 대기열과 같은보다 표준화 된 모델을 고려해야합니다. 지금까지 가장 성공한 것은 암묵적인 프로그래밍으로 보였으며 스토리지를 직접 언급하지도 않았습니다.
새로운 모델을 설계하려는 경우 평가를 dag로 확장하고 다른 항목이 지정되지 않은 경우 기본 dag를 고려할 수 있습니다. 대부분의 경우 기본 설정은 트리 일 뿐이며 여러 잎이 동일한 입력에 연결될 수 있습니다. 예를 들어 균형 잡힌 나무의 대기열을 사용하거나 잎이 대부분 일정한 깊은 나무의 스택을 사용하거나 잎이 대부분 입력의 사본 인 깊은 나무의 경우 젤리와 같은 것을 사용할 수 있습니다.
그러나 이진 트리의 모양을 연산자 당 2 비트로 인코딩 할 수 있습니다. 따라서 언어에 64 개 미만의 연산자가있는 경우 실제로 기존 모델을 무시하고 스페어 비트로 전체 트리를 인코딩 할 수 있습니다 (combin_parent 및 below_leaf 플래그라고 함). 더 많은 연산자가 있어도 꽤 좋은 기본값 (예 : Jelly 모델)과 3 개의 수정자를 만들어 변경할 수 있습니다.
편의상 암시 적 스토리지와 명시 적 스토리지에 동일한 모델을 사용할 수 있지만 반드시 그럴 필요는 없습니다. 예를 들어, 암시 적 저장소에 스택을 사용할 수 있지만 명시 적 저장소 (또는 암시 적 저장소 외에 다른 명시 적 저장소)에서 요소를 팝하지는 않습니다. 최종 문서에서 스택이라고하지는 않지만 아이디어를 얻습니다.
참고로, 이진 트리의 완벽한 인코딩의 크기는 카탈로니아 어 숫자 의 로그입니다 . 그리고 "이진 (binary)"dag의 완벽한 인코딩의 크기는 A082161 의 로그 이지만 분명히 비현실적입니다. 이것은 다른 인수 순서를 가진 연산자가 두 개의 다른 연산자를 가정하고 그렇지 않은 경우 다른 비트를 추가한다고 가정합니다.
때때로 루프에 변수를 원할 수도 있습니다. 다른 방법으로 루프를 다시 작성할 수 있습니다. 그러나 실제로 필요한 경우 이름 외에 1 바이트 구문을 사용하여 변수를 정의하지 마십시오. 사전 초기화 된 값만 사용하지 않는 한 일반적으로 1 비트 플래그를 사용하여이 변수를 읽거나 쓰는지 여부를 지정하는 것이 더 효율적입니다.