#### 4.1.9 Referências a Objetos Embutidos e a Objetos Externos

Alguns tipos de objeto OOGL (`LIST`, `INST`) permitem referências a outros objetos OOGL, que podem aparecer literalmente no fluxo de dados, serem chamados a partir de arquivos em disco, ou serem comunicados a partir de outro lugar via objetos nomeados. Comandos GCL também aceitam objetos geométricos através desses meios citados.

A sintaxe genérica é

          <oogl-object>  ::=
         	[ "{" ]
         	    [ "define" symbolname ]
         	    [ ["="] object-keyword ...
         		 | "<" filename
         		 | ":" symbolname ]
         	[ "}" ]

onde os itens entre aspas duplas são sequências de caracteres literais (que aparecem sem as aspas), os itens entre colchêtes ([]) são opcionais, e a barra vertical (|) denota alternativas. Chaves, quando estiverem presentes, apenas indicam coincidência; o par mais externo de chaves é geralmente requerido quando o objeto estiver em um contexto maior, e.g. quando for parte de um objeto maior ou incluído em um fluxo de comando do Geomview.

Por exemplo, cada uma das três linhas seguintes:

         	{ define fred   QUAD 1 0 0  0 0 1  0 1 0  1 0 0 }

         	{ define fred = QUAD 1 0 0  0 0 1  0 1 0  1 0 0 }

         	{ appearance { +edge } LIST { < "file1" } { : fred } }

         	VECT 1 2 0   2 0   0 0 0   1 1 2

é um bojeto OOGL válido. O último exemplo é válido somente quando estiver delimitado precisamente e residindo precisamente no seu próprio arquivo em disco.

A construção com ":" permite referência a símbolos, criados com `define`. Um valor inicial de um símbolo é um objeto nulo. Quando um símbolo for (re)definido, todas as referências a esse símbolo são automaticamente modificadas.

A construção "`define` NOME" permite definir um simbolo global para um objeto especificado. Se "NOME" referir-se a um objeto que já existia anteriormente, então o antigo objeto é descartado e substituído pela nova definição. Veja `(read ...)`. `(hdefine ...)`.

A construção "<" faz com que um arquivo em disco seja lido. Note que isso não é um mecanismo textual genérico de uso da diretiva de programação "include"; um objeto OOGL completo deve aparecer no arquivo referenciado na construção "<".

Arquivos lidos usando "<" são procurados primeiramente no diretório do arquivo que é refrenciado em "<", se existir; se essa busca falhar, o caminho normal de busca (veja `(load-path ...)`) é usado. A busca padrão olha primeiro no diretório atual, a seguir nos diretórios de dados do Geomview.

Ressaltando, espaços em branco e caracteres indicadores de final de linha são insignificantes, e comentários de "#" podem aparecer em qualquer lugar.