<!-- ML-Doc/match-tree.mldoc -->
<!-- Entities.sgml entry 
<!ENTITY MatchTree SDATA "../match-tree.sml">
 -->

<!DOCTYPE ML-DOC SYSTEM>

<COPYRIGHT OWNER="Bell Labs, Lucent Technologies" YEAR=1998>
<VERSION VERID="1.0" YEAR=1998 MONTH=6 DAY=3>
<TITLE>The MatchTree structure</TITLE>

<INTERFACE>
<HEAD>The <CD/MatchTree/ structure</HEAD>
<!-- optional SEEALSO; uncomment to use     -->
<!-- <SEEALSO>    -->
<!--   non-empty list of XREFS here   -->
<!-- </SEEALSO>    -->

<PP>
This structure implements the type used to report matching
information and associated operations. <PP>


<STRUCTURE STRID="MatchTree">
  <SIGBODY SIGID="MATCH_TREE" FILE=MATCH-TREE>
    <SPEC>
      <DATATYPE><TYPARAM>'a<ID>match_tree
        <CONS>Match<TY>('a * 'a match_tree list)
      </DATATYPE>
    <SPEC>
      <VAL>root<TY>'a match_tree -> 'a
        <COMMENT>
          <PROTOTY>
          root <ARG/mt/
          </PROTOTY>
          returns the root (outermost) match in the tree <ARG/mt/.
    <SPEC>
      <VAL>nth<TY>('a match_tree * int) -> 'a
        <COMMENT>
          <PROTOTY>
          nth (<ARG/mt/, <ARG/n/)
          </PROTOTY>
          returns the <ARG/n/th match in the tree <ARG/mt/. Matches
are labeled in preorder, starting at 0. The <ARG/n/th match in a tree
correspond to the match of the <ARG/n/th subexpression of a regular
expression, when counted from left to right (and letting the full
expression be indexed at 0).
    <SPEC>
      <VAL>map<TY>('a -> 'b) -> 'a match_tree -> 'b match_tree
        <COMMENT>
          <PROTOTY>
          map <ARG/f/ <ARG/mt/
          </PROTOTY>
          maps a function <ARG/f/ over the tree <ARG/mt/ in preorder.
    <SPEC>
      <VAL>app<TY>('a -> unit) -> 'a match_tree -> unit
        <COMMENT>
          <PROTOTY>
          app <ARG/f/ <ARG/mt/
          </PROTOTY>
          applies a given function <ARG/f/ over every element of the
tree <ARG/mt/ in preorder.
    <SPEC>
      <VAL>find<TY>('a -> bool) -> 'a match_tree -> 'a option
        <COMMENT>
          <PROTOTY>
          find <ARG/f/ <ARG/mt/
          </PROTOTY>
          finds the first match in the tree <ARG/mt/ that satisfies
the predicate <ARG/f/ (or <CD/NONE/).
    <SPEC>
      <VAL>num<TY>'a match_tree -> int
        <COMMENT>
          <PROTOTY>
          num <ARG/mt/
          </PROTOTY>
          returns the number of matches included in the tree <ARG/mt/.
</STRUCTURE>

</INTERFACE>
