lib(viewable)

 Module for the management of
           viewables. These are logical, multidimensional
           arrays and graph structures whose elements can be accessed
           globally for visualisation purposes. The creation,
           destruction and modification of viewables and their
           contents can be monitored by visualisation clients. 

            The library lib(graph_algorithms) contains
           predicates to create and manipulate graph structures.

            Viewables are created using viewable_create/2/3/4
            and last until this call is
           backtracked over. During its lifetime, a viewable is said to be
           existent. This can be tested with
           viewable/1, which can also be used to enumerate all
           existent viewables. 

            One or more of the dimensions of a viewable can
           optionally be flexible in size while the viewable is
           existent. This allows new elements to be added to the
           viewable, using viewable_expand/3/4. The
           fixity of a dimension denotes whether it is fixed
           or flexible. In the case of graph typed viewables, the
           fixity refers to the ability to add new nodes and/or edges
           to the graph.  Currently only fixed graphs are
           supported.

            A viewable is given a type when it is created. For
           array types, this specifies the number of dimensions, the
           fixity of each dimension and the type of viewable elements
           which the viewable can contain. For graph types, this
           simply specifies whether the graph structure (number of
           nodes, edge direction etc) may be modified during the
           viewables lifetime. An existent viewable's type can be
           retrieved using viewable_type/2, and its
           current sizes of the dimensions can be retrieved using
           viewable_size/2. 

           Optimised behaviour without visualisation Visualisation
           clients can only monitor viewables whose creation occurs
           after they register. When there are no registered
           visualisation clients, for efficiency purposes no data on
           viewables is stored and so the predicates in this module behave
           slightly differently from normal:

           

           viewable_create/2/3/4 and
           viewable_expand/3/4 succeed with any arguments. It is
           therefore reasonable to leave these predicates in your code even
           when not visualising.

           viewable/1, viewable_size/2 and
           viewable_type/2 fail whatever the arguments. If
           these predicates are used (normally they should not be
           necessary) the possibility of failure should be taken into
           account.

           



