OPTIONAL
SYNOPSIS
        int   assoc (mixed key, mixed *keys)
        mixed assoc (mixed key, mixed *alist [, mixed fail] )
        mixed assoc (mixed key, mixed *keys, mixed *data [, mixed fail] )
DESCRIPTION
        All invocation forms search for a <key> in an <alist> (an array
        of two equal-sized arrays) or in an ordered array <keys>.
        An attempt to search in any other structure will yield an
        unpredictable result.
        Complexity: O( lg(n) ) , where n is the number of keys.
        1. Form: Key Search
          <key> is searched in the array <keys>, result is the index at
          which <key> was found. If it isn't found, -1 is returned.
        2. Form: Alist Lookup
          <key> is searched in the <alist>, result is the data associated
          with <key> if it is found. If it isn't found, the result
          will be 0, or <fail> if specified.
        3. Form: Ordered List Lookup
          <key> is searched in the array <keys>, the index at which it
          is found is as index into <data> to get the return value.
          If <key> is not found, the reuslt will be 0, or <fail> if
          specified.
          For this to be useful, <data> has to be ordered so that
          it matches <key>. This form of lookup is therefore used
          primarily with multidimensional alists.
SEE ALSO
        alists(LPC), insert_alist(E), order_alist(E)