```Search                        Top                                  Index
```
```REF VECTORS                                         John Gibson Aug 1989

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
<<<<<<<<<<<<<<<<<<<<<                             >>>>>>>>>>>>>>>>>>>>>>
<<<<<<<<<<<<<<<<<<<<<   STANDARD FULL VECTORS     >>>>>>>>>>>>>>>>>>>>>>
<<<<<<<<<<<<<<<<<<<<<                             >>>>>>>>>>>>>>>>>>>>>>
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

A Standard Full (S.F.)  vector in Pop-11  is an indexable  1-dimensional
array where  each element  can be  any POP  item; subscript  values  for
vectors number from 1 upwards. The creation and manipulation  procedures
for standard full vectors are listed.
A standard  full vector  is a  particular built-in  instance of  the
general class of vectors which can be constructed using * conskey or the
syntax construct * defclass. See REF * DATA for procedures applicable to
vectors in general

CONTENTS - (Use <ENTER> g to access required sections)

1   Predicates on S.F. Vectors

2   Constructing New S.F. Vectors

3   Accessing S.F. Vector Elements

4   Generic Datastructure Procedures on S.F. Vectors

5   Miscellaneous

6   Related Documentation

-----------------------------
1  Predicates on S.F. Vectors
-----------------------------

isvector(item) -> bool                                       [procedure]
Returns true if item is a standard full vector, false if not.

check_vector(item)                                           [procedure]
Mishaps if item is not a standard full vector.

--------------------------------
2  Constructing New S.F. Vectors
--------------------------------

See HELP * TWIDDLYBRA  and HELP * PERCENT  for information  on  building
standard full vectors with syntactic brackets.

consvector(item1, item2, ..., itemN, N) -> fvec              [procedure]
Constructs and  returns a  standard full  vector from  the  next
(simple integer) N items on the  user stack, where the top  item
on the  stack  will  be  at the  highest  subscript  value.  For
example:

consvector("a", "b", "c", 3) =>
** {a b c}

initv(N) -> fvec                                             [procedure]
Constructs and returns a standard  full vector fvec of  length N
whose  elements   are   all   the  word   "undef".   (See   also
* initvectorclass.)

sysvecons(item1, item2, ..., itemN, M) -> fvec               [procedure]
Constructs and returns  a standard full  vector fvec  containing
all the items on the stack  EXCEPT the last M, i.e. it  performs
consvector(N) where N is

stacklength() - M

(This is used by the Pop-11 vector constructor, which saves  the
stacklength M before compiling a vector constructor  expression,
and then calls sysvecons(M) after compiling it, thus producing a
vector of all the items in the expression.)

---------------------------------
3  Accessing S.F. Vector Elements
---------------------------------

destvector(fvec) -> (item1, item2, ..., itemN, N)            [procedure]
Destructs the  standard  full vector  fvec,  i.e. puts  all  its
elements on the stack, together with its length (in other words,
does the opposite of consvector). E.g.

destvector({A B C D}) =>
** A B C D 4

subscrv(n, fvec) -> item                                     [procedure]
item -> subscrv(n, fvec)
Returns or updates the n-th element of the standard full  vector
fvec. Since subscrv is the class_apply of standard full  vectors
(see REF * KEYS), this can also be called as

fvec(n) -> item
item -> fvec(n)

---------------------------------------------------
4  Generic Datastructure Procedures on S.F. Vectors
---------------------------------------------------

The  generic   data  structure   procedures  described   in   REF * DATA
(datalength, appdata, explode,  fill, copy, etc)  are all applicable  to
standard  full   vectors,  as   are   the  generic   vector   procedures
(initvectorclass, move_subvector, sysanyvecons,  etc) also described  in
that file.

----------------
5  Miscellaneous
----------------

nullvector -> vec                                             [constant]
The value of this constant is a vector of length 0.

vector_key -> key                                             [constant]
This constant holds the key structure for standard full  vectors
(see REF * KEYS).

------------------------
6  Related Documentation
------------------------

REF * INTVEC
Describes intvecs (vectors  containing 32 bit  signed integers)  and
shortvecs (vectors containing 16 bit signed integers).

REF * STRINGS
Describes byte vectors.

HELP * BITVECTORS
Describes LIB * BITVECTORS, a  package for creating and  manipulating
compact bitvectors.

REF * DEFSTRUCT
Describes syntax for creating new vector or record classes.

REF * DATA
Information on Poplog data types and how they are represented.

REF * KEYS
Describes the information  associated with each  data type and  some
general procedures for  manipulating data and  creating fast  access
procedures.

REF * FASTPROCS
Describes  fast,  non-checking,  procedures  for  accessing   vector
fields.

--- C.all/ref/vectors