%% $Date: 2003/09/15 16:37:46 $ $Author: nthiery $ $Revision: 1.1.1.1 $

\begin{Mhelppage}{Intersection}{N. M. Thiéry}

\begin{MInfo}
  \eng{a type representing the intersection of several types}
  \de{}
%  \de {Typ zum Testen mehrerer Typen}
\end{MInfo} % end of MInfo

\begin{MIntro}
  \eng{\Mex{\Mthis(\Mseq{type1, type2})} represents all objects having
       all of the types \Mex{\Mseq{type1, type2}}}
  \de{}
%  \de {Mit \Mthis\ k"onnen Objekte mit einem von mehreren Typen identifiziert werden.}
\end{MIntro} % end of MIntro

\begin{MCalls}
  \call[testtype]{obj, \Margs{\Mseq{obj\_types}}}
\end{MCalls} % end of MCalls

\begin{MParameters}
  \param{obj}
    \eng{any \mupad\ object}
    \de {ein beliebiges \mupad-Objekt}
  \param{obj\_types}
    \eng{a sequence of types; a type can be an object of the library \Mup{Type}
         or one of the possible return values of \Mup{domtype} and \Mup{type}}
    \de {}
\end{MParameters} % end of MParameters

\begin{MReturnValue}
  \eng{see \Mup{testtype}}
  \de {siehe \Mup{testtype}}
\end{MReturnValue} % end of MReturnValue

\MRelatedFunctions{testtype}

\MKeywords{Type}

\begin{MDetails}
  \eng{The call \Mupc{testtype}{obj, \Margs{\Mseq{obj\_types}}}
       checks, whether \Mpar{obj} has all the
       given types \Mseq{obj\_types}.}

  \eng{The call \Mupc{testtype}{obj, \Margs{\Mseq{obj_types}}} is thus
       equivalent to the call \Mupc{_lazy_and}{\Mupc{map}{obj_types,
       x~->~testtype(obj, x)}}, testing \Mex{obj} against all types in
       turn.}

  \eng{\Mseq{obj\_types} must be a (nonempty)
       \Mhref[stdlib,_exprseq]{sequence} of types (see
       \Mup{testtype}).}

  \eng{This type does not represent a \Mhref[property,]{property}.}
%%
%%   \de {Mit \Mthis\ werden Objekte erzeugt, um f"ur beliebige \mupad-Objekte zu bestimmen, ob sie
%%        einen der Typen \Mseq{obj\_types} haben.}

%%   \de {Dazu wird die Funktion \Mup{testtype} mit dem zu testenden Objekt und dem mit
%%        \Mthis\ erzeugten Typ als zweites Argument aufgerufen werden. \Mup{testtype} gibt \Mex{TRUE}
%%        zur"uck, wenn das Objekt einen der Typen von \Mseq{obj\_types} hat, sonst \Mex{FALSE}.}
\end{MDetails} % end of MDetails

\begin{MExample}{type}
\eng{Check, whether the given object is a positive and odd integer:}
\de {Test, ob das gegebene Objekt eine positive und negative ganze Zahl ist.}
\begin{Mexin}
testtype(1, Type::Intersection(Type::PosInt, Type::Odd))
\end{Mexin}
\begin{Mexout}
                             TRUE
\end{Mexout}
\eng{\Mex{2} however, is not a positive and a odd number:}
\de {\Mex{2} ist nicht eine positive und ungerade Zahl.}
\begin{Mexin}
testtype(2, Type::Intersection(Type::PosInt, Type::Odd))
\end{Mexin}
\begin{Mexout}
                             FALSE
\end{Mexout}
\end{MExample}

\begin{MExample}{type use}
\eng{\Mup{testtype} is used to \Mhref[stdlib,select]{select} positive
     and odd integers:}
\de {Benutzen von \Mup{testtype}, um positive und odd ganze
Zahlen \Mhref[stdlib,select]{auszuwählen}.}
\begin{Mexin}
SET:= {-2, -1.5, -1, -0.5, 0, 0.5, 1, 1.5, 2, 3}:
select(SET, testtype, Type::Intersection(Type::PosInt, Type::Odd))
\end{Mexin}
\begin{Mexout}
                            {1, 3}
\end{Mexout}
\begin{Mexin}
delete SET:
\end{Mexin}
\end{MExample} % end of MExample

\begin{MChanges}
  \version{3.0}
  \new
\end{MChanges} % end of MChanges

\end{Mhelppage}
%% end of helppage 'Intersection'
