3.12.3 Usage

A Prolog process can be started by choosing Run Prolog from the Prolog menu, by typing C-c <RET>, or by typing M-x run-prolog. It is however not strictly necessary to start a Prolog process manually since it is automatically done when consulting or compiling, if needed. The process can be restarted (i.e. the old one is killed and a new one is created) by typing C-u C-c <RET>, in this case Emacs will also prompt for a Lisp list of extra parameters to pass on the command line.

Programs are run and debugged in the normal way, with terminal I/O via the *prolog* buffer. The most common debugging predicates are available from the menu or via key-bindings.

A particularly useful feature under the Emacs interface is source-linked debugging. This is enabled or disabled using the Prolog/Source-linked debugging menu entry. It can also be enabled by setting the Emacs variable prolog-use-sicstus-sd to t in ~/.emacs. Both these methods set the Prolog flag source_info to emacs. Its value should be emacs while loading the code to be debugged and while debugging. If so, the debugger will display the source code location of the current goal when it prompts for a debugger command, by highlighting the the current line. If source_info was off when the code was loaded, or if it was asserted or loaded from user, the current goal will still be shown but out of context. Note that if the code has been modified since it was last loaded, Prolog's line number information may be invalid. If this happens, just reload the relevant buffer.

Another useful feature which is available for code loaded with source_info switched on is that the debugger can show the variable bindings for the current goal, its ancestors, and the clauses they occur in. The bindings are shown in a separate *Prolog Bindings* buffer. This is enabled by the C-c C-g command and disabled by the C-u C-c C-g command.

Yet another feature which is available for compiled code loaded with source_info switched on is code coverage highlighting (see Coverage Analysis). Highlighting of the current buffer is refreshed by the C-c C-o command and cleared by the C-u C-c C-o command.

Consultation and compilation is either done via the menu or with the following key-bindings:

C-c C-f
Consult file.


C-c C-b
Consult buffer.


C-c C-r
Consult region.


C-c C-p
Consult predicate.


C-c C-c f
Compile file.


C-c C-c b
Compile buffer.


C-c C-c r
Compile region.


C-c C-c p
Compile predicate.

The boundaries used when consulting and compiling predicates are the first and last clauses of the predicate the cursor is currently in.

Other useful key-bindings are:

M-a
Go to beginning of clause. Go to the previous clause if already at the beginning.


M-e
Go to end of clause. Go to the next clause if already at the end.


C-M-c
Mark clause.


C-M-a
Go to beginning of predicate.


C-M-e
Go to end of predicate.


C-M-h
Mark predicate.


M-{
Go to the previous paragraph (i.e. empty line).


M-}
Go to the next paragraph (i.e. empty line).


M-h
Mark paragraph.


C-M-n
Go to matching right parenthesis.


C-M-p
Go to matching left parenthesis.


M-;
Creates a comment at comment-column. This comment will always stay at this position when the line is indented, regardless of changes in the text earlier on the line, provided that prolog-align-comments-flag is set to t.


C-c C-t
C-u C-c C-t
Enable and disable creeping, respectively.


C-c C-d
C-u C-c C-d
Enable and disable leaping, respectively.


C-c C-z
C-u C-c C-z
Enable and disable zipping, respectively.


C-c C-g
C-u C-c C-g
Enable and disable bindings window, respectively. When enabled, SICStus will endeavor to show the variable bindings of the clause containing the current goal. C-c C-g splits the *prolog* window vertically and inserts the *Prolog Bindings* window, which shows the bindings and is updated upon every debugger command. C-u C-c C-g deletes the *Prolog Bindings* window.


C-c C-o
C-u C-c C-o
Refresh and clear coverage highlighting for the current buffer, respectively. Lines containing coverage sites (see Coverage Analysis) will be highlighted in face pltrace-face-reached-det (defaults to green) if they were hit at least once and made no nondet calls with the execution profiler switched on; in face pltrace-face-reached-nondet (defaults to yellow) if they were hit at least once and made one or more nondet calls with the execution profiler switched on; otherwise, they will be highlighted in face pltrace-face-reached-not (defaults to red). Lines not containing coverage sites are not highlighted.


C-x SPC
C-u C-x SPC
Set and remove a line breakpoint. This uses the advanced debugger features introduced in release 3.8; see Advanced Debugging.


C-c C-s
Insert the PredSpec of the current predicate into the code.


C-c C-n
Insert the template of the current predicate (name, parentheses, commas) into the code.


M-RET
Insert a line break followed by the template of the current predicate into the code. This can be useful when writing recursive predicates or predicates with several clauses. See also the prolog-electric-dot-flag variable below.


C-c C-v a
Convert all variables in a region to anonymous variables. See also the prolog-electric-underscore-flag Emacs variable.


C-c ?
Help on predicate. This requires the SICStus info files to be installed. If the SICStus info files are installed in a nonstandard way, you may have to change the Emacs variable prolog-info-predicate-index.


C-c RET
C-u C-c RET
Run Prolog. With the second variant, Emacs will prompt for a Lisp list of extra parameters to pass on the command line.


C-c C-c
Interrupt Prolog. The same as typing ^C in a shell.


C-c C-\
Kill Prolog. Immediately kills the process.

Send feedback on this subject.