Sweep can help you extract a part of the body of a Prolog clause into a separate predicate, so you can reuse it in other places.
Extract the goal between point and mark into a new predicate.
This command extracts the selected goal into a separate predicate. It prompts you for the name of the new predicate and inserts a definition for that predicate in the current buffer, while replacing the current region with a call to this new predicate. The body of the new predicate is the goal in the current region, and this command determines the arguments of the new predicate based on the variables that the goal to extract shares with the containing clause.
If the selected goal contains a cut whose scope would change as a
result of being extracted from the current clause,
sweeprolog-extract-region-to-predicate
warns you about it and
asks you to confirm before continuing. If your code already includes
a definition for the predicate that
sweeprolog-extract-region-to-predicate
would define, this
command similarly warns you and asks for confirmation.
If you call sweeprolog-extract-region-to-predicate
when the
region does not contain a valid Prolog term, this command complains
and refuses to extract the invalid term.
By default, sweeprolog-extract-region-to-predicate
is not bound
directly to any key in Sweep Prolog mode; instead, you can invoke it
by typing M-RET (sweeprolog-insert-term-dwim
) when
the region is active. See Context-Based Term Insertion.
If you invoke sweeprolog-extract-region-to-predicate
with a
prefix argument—either directly or via
sweeprolog-insert-term-dwim
by typing C-u M-RET
with an active region—then after extracting the selected goal to a
new predicate, this command searches the current buffer for other
goals that the selected goal subsumes, and suggests replacing them
with invocations of the newly defined predicate. See Query Replace Term.
With Context Menu mode enabled, you can also invoke this command by right-clicking on an active region and selecting ‘Extract to New Predicate’.