Success and failure in Stratego allows one to avoid computing with Boolean values all the time. However, sometimes it is necessary to capture the failure (or success) of a strategy and translate it into a term. For example, when performing
constant folding? of relational expressions one would like to write
ConstFold :
|[ i < j ]| -> <lt>(i, j)
However, when the
lt
fails, the rule fails. What is needed is a little wrapper strategy that turns failure
and success into an appropriate term.
ConstFold :
|[ i < j ]| -> <to-bool(<lt>(i,j))>
where
to-bool
could be defined as
to-bool(s) =
if s then
!|[ true ]|
else
!|[ false ]|
end
that is, when
s
succeeds return
true
, otherwise return
false
.
(Note that these examples use
concrete syntax.)
--
EelcoVisser - 17 Jun 2002