Lexical Scope

RETRO has a single dictionary, but does provide a means of using lexical scope to keep this dictionary clean.

Example

```
{{
  'A var
  :++A  &A v:inc ;
---reveal---
  :B ++A ++A @A n:put nl ;
}}
```


In this example, the lexical namespace is created with {{. A variable (A) and word (++A) are defined. Then a marker is set with ---reveal---. Another word (B) is defined, and the lexical area is closed with }}.

The headers between {{ and ---reveal--- are then hidden from the dictionary, leaving only the headers between ---reveal--- and }} exposed.

If you wish to hide all headers in a {{ ... }} block, leave out the ---reveal---.

```
{{
  :a #3 ;
  :b a dup * ;
}}
```


Notes

This only affects word visibility within the scoped area. As an example:

```
:a #1 ;
 
{{
  :a #2 ;
---reveal---
  :b 'a s:evaluate n:put ;
}}
```


In this, after }} closes the area, the :a #2 ; is hidden and the s:evaluate will find the :a #1 ; when b is run.

A Word of Warning

Use of these words can result in a corrupt dictionary and system crashes. Specifically, use of ---reveal--- with an empty private or public section will result in dictionary corruption.

If you don't need private words, don't put them in a scope. And if you don't need public words, don't include the ---reveal---.