As for the other +
with the first argument specifying a name for
the constructed strategy.
Non-deterministic choice.
Non-deterministic choice. Normally, construct a strategy that
first applies either this strategy or the given strategy. If it
succeeds, succeed with the resulting term. Otherwise, apply q
.
Currently implemented as deterministic choice, but this behaviour
should not be relied upon.
When used as the argument to the <
conditional choice
combinator, +
just serves to hold the two strategies that are
chosen between by the conditional choice.
q
is evaluated at most once.
As for the other <
with the first argument specifying a name for
the constructed strategy.
Conditional choice: c < l + r
.
Conditional choice: c < l + r
. Construct a strategy that first
applies this strategy (c
). If c
succeeds, the strategy applies
l
to the resulting term, otherwise it applies r
to the original
subject term. lr
is evaluated at most once.
As for the other <*
with the first argument specifying a name for
the constructed strategy.
Sequential composition.
Sequential composition. Construct a strategy that first applies
this strategy. If it succeeds, then apply q
to the new subject
term. Otherwise fail. q
is evaluated at most once.
As for the other <+
with the first argument specifying a name for
the constructed strategy.
Deterministic choice.
Deterministic choice. Construct a strategy that first applies
this strategy. If it succeeds, succeed with the resulting term.
Otherwise, apply q
to the original subject term. q
is
evaluated at most once.
Apply this strategy to a term.
Apply this strategy to a term. By default, just run the implementation body wrapped in profiling.
Make one of these strategies with the given name and body f
.
Identify this strategy by its name.
Identify this strategy by its name.
Any-rewriting strategies. A strategy is a function that takes a term of any type as input and either succeeds producing a new term (
Some
), or fails (None
).name
is used to identify this strategy in debugging output.