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. ------Author: Rudi Lutz April 1983