A widespread convention in Prolog is using a common prefix with a
numeric suffix to name related variables, such as Foo0,
Foo1, etc. Sweep provides convenient commands for managing
such numbered variable sequences consistently:
Prompt for a numbered variable and increment it and all numbered
variables with the same base name and a greater number in the current
clause (sweeprolog-increment-numbered-variables).
Prompt for a numbered variable and decrement it and all numbered
variables with the same base name and a greater number in the current
clause (sweeprolog-decrement-numbered-variables).
Numbering variables is often used to convey the order in which they are bound. For example:
%! process(+State0, -State) is det. process(State0, State) :- foo(State0, State1), bar(State2, State1), baz(State2, State).
Here State0 and State are respectively the input and
output arguments of process/2, and State1 and
State2 represent intermediary stages between them.
The command C-c C-+
(sweeprolog-increment-numbered-variables) prompts you for a
numbered variable in the current clause, and increments the number of
that variable along with all other numbered variables with the same
base name and a greater number. You can use it to “make room” for
another intermediary variable between two sequentially numbered
variables. If you call this command with point on a numeric variable,
it suggests that variable as the default choice. If you call this
command with a prefix argument, it increments by the numeric value of
the prefix argument, otherwise it increments by one.
For instance, typing C-c C-+ State1 RET with point anywhere in
the definition of process/2 from the above example results in
the following code:
process(State0, State) :- foo(State0, State2), bar(State3, State2), baz(State3, State).
Note how sweeprolog-increment-numbered-variables replaced all
occurrences of State1 with State2, while the original
occurrences of State2 are replaced with State3. The
overall semantics of the clause doesn’t change, but you can now
replace the call to foo/2 with two goals and reintroduce
State1 as an intermediary result between them while keeping
your numbering consistent, e.g.:
process(State0, State) :- one(State0, State1), two(State1, State2), bar(State3, State2), baz(State3, State).
If Context Menu mode is enabled, you can also invoke
sweeprolog-increment-numbered-variables by right-clicking on a
numbered variables and selecting ‘Increment Variable Numbers’
from the context menu. See Context Menu.
The command C-c C--
(sweeprolog-decrement-numbered-variables) is similar to
C-c C-+ except it decrements all numbered variables starting
with a given numbered variable rather than incrementing them. When
you delete an intermediary numbered variable and end with a gap in the
variable numbering sequence, you can use this command to close the gap
by decrementing the following numbered variables.
After invoking either C-c C-- or C-c C-+, you can continue
to decrement or increment the same set of numbered variables by
repeating with - and +.