In the parser dialog dialect, expressions are calculated in brackets. However, the result of the assessment does not become part of the analysis rule. This is by design, so you can work in this style:
>> count: 0
== 0
>> parse "aab" [while ["a" (print "Match a" ++ count)] "b"]
Match a
Match a
== true
>> count
== 2
- . (, ) COMPOSE, . :
>> count: 0
== 0
>> rule: compose/deep [while ["a" (print "Match a" ++ count)] "b"]
Match a
== [while ["a" 0] "b"]
>> count
== 1
>> parse "aab" rule
== false
AFAIK, Rebol 2 "DO" . , , .
Rebol 3 DO, , -. wiki, , true "abc":
>> result: none
== none
>> parse "abc" [copy result thru do [reverse "cba"]]
== false
>> result
== none
( , - " DO COPY, SET RETURN. , , , ...)