HELP FORALL_MATCH                                   Rudi Lutz April 1983
                                Updated to use "!" Aaron Sloman Oct 1996

The format of this is:

    FORALL_MATCH ! <pattern> IN <list> DO
        <actions>
    ENDFORALL_MATCH

Its effect is to do <actions> for every possible way the <pattern> can match
<list>. <pattern> can be any pattern recognised by the normal pop matcher,
including ? and ?? variables, restriction procedures, = and == , etc. However
any restriction procedures will be applied in a strictly LEFT TO RIGHT order
(as they appear in the pattern).
In addition quitloop etc. should work if used in the <actions> .

Example of use:

lvars x y;

forall_match ! [== ?x == ?y ==] in [ 1 2 3 4] do
    x+y=>
endforall_match; ;;;finds all sums of pairs of numbers in a list

** 3
** 4
** 5
** 5
** 6
** 7

lvars x y z w u v;

forall_match ! [??x ??y [??z ??w] ??u ??v] in [a b [c d] e f] do
quitif(x=[a]);
    [x ^x y ^y z ^z w ^w u ^u v ^v]==>
endforall_match;

** [x [] y [a b] z [] w [c d] u [] v [e f]]
** [x [] y [a b] z [] w [c d] u [e] v [f]]
** [x [] y [a b] z [] w [c d] u [e f] v []]
** [x [] y [a b] z [c] w [d] u [] v [e f]]
** [x [] y [a b] z [c] w [d] u [e] v [f]]
** [x [] y [a b] z [c] w [d] u [e f] v []]
** [x [] y [a b] z [c d] w [] u [] v [e f]]
** [x [] y [a b] z [c d] w [] u [e] v [f]]
** [x [] y [a b] z [c d] w [] u [e f] v []]

Try that again without the quitif command.


--- File: local/help/forall_match
--- Distribution: all
--- University of Sussex Poplog LOCAL File ------------------------------

--- $poplocal/local/help/forall_match
--- Copyright University of Birmingham 1996. All rights reserved. ------
