
HANDBOOK
/ GENTLE PRIMER
/ Smart Traversal
/
Threaded Parameter
A sweep predicate may also have an additional input and an output
parameter, which must then both be of the same type:
-
'sweep' P ( ANY, T -> T )
In the default rule, the parameter is threaded through the arguments
(the input of a member is the output of its predecessor):
For example,
to count all identifier applications, we can write
'root' Program(-> Pgm) Count(Pgm, 0 -> N) print(N)
'sweep' Count(ANY, INT -> INT)
'rule' Count(id(Id, Pos), N -> N+1)