/usr/lib/swi-prolog/doc/Manual/editreload.html is in swi-prolog-nox 5.10.4-3ubuntu1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 | <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<HTML>
<HEAD>
<TITLE>SWI-Prolog 5.11.18 Reference Manual: Section 3.3</TITLE><LINK REL=home HREF="index.html">
<LINK REL=contents HREF="Contents.html">
<LINK REL=index HREF="DocIndex.html">
<LINK REL=summary HREF="summary.html">
<LINK REL=previous HREF="usingmodules.html">
<LINK REL=next HREF="pceemacs.html">
<STYLE type="text/css">
/* Style sheet for SWI-Prolog latex2html
*/
dd.defbody
{ margin-bottom: 1em;
}
dt.pubdef
{ background-color: #c5e1ff;
}
dt.multidef
{ background-color: #c8ffc7;
}
.bib dd
{ margin-bottom: 1em;
}
.bib dt
{ float: left;
margin-right: 1.3ex;
}
pre.code
{ margin-left: 1.5em;
margin-right: 1.5em;
border: 1px dotted;
padding-top: 5px;
padding-left: 5px;
padding-bottom: 5px;
background-color: #f8f8f8;
}
div.navigate
{ text-align: center;
background-color: #f0f0f0;
border: 1px dotted;
padding: 5px;
}
div.title
{ text-align: center;
padding-bottom: 1em;
font-size: 200%;
font-weight: bold;
}
div.author
{ text-align: center;
font-style: italic;
}
div.abstract
{ margin-top: 2em;
background-color: #f0f0f0;
border: 1px dotted;
padding: 5px;
margin-left: 10%; margin-right:10%;
}
div.abstract-title
{ text-align: center;
padding: 5px;
font-size: 120%;
font-weight: bold;
}
div.toc-h1
{ font-size: 200%;
font-weight: bold;
}
div.toc-h2
{ font-size: 120%;
font-weight: bold;
margin-left: 2em;
}
div.toc-h3
{ font-size: 100%;
font-weight: bold;
margin-left: 4em;
}
div.toc-h4
{ font-size: 100%;
margin-left: 6em;
}
span.sec-nr
{
}
span.sec-title
{
}
span.pred-ext
{ font-weight: bold;
}
span.pred-tag
{ float: right;
padding-top: 0.2em;
font-size: 80%;
font-style: italic;
color: #202020;
}
/* Footnotes */
sup.fn { color: blue; text-decoration: underline; }
span.fn-text { display: none; }
sup.fn span {display: none;}
sup:hover span
{ display: block !important;
position: absolute; top: auto; left: auto; width: 80%;
color: #000; background: white;
border: 2px solid;
padding: 5px; margin: 10px; z-index: 100;
font-size: smaller;
}
</STYLE>
</HEAD>
<BODY BGCOLOR="white">
<DIV class="navigate"><A class="nav" href="index.html"><IMG SRC="home.gif" BORDER=0 ALT="Home"></A>
<A class="nav" href="Contents.html"><IMG SRC="index.gif" BORDER=0 ALT="Contents"></A>
<A class="nav" href="DocIndex.html"><IMG SRC="yellow_pages.gif" BORDER=0 ALT="Index"></A>
<A class="nav" href="summary.html"><IMG SRC="info.gif" BORDER=0 ALT="Summary"></A>
<A class="nav" href="usingmodules.html"><IMG SRC="prev.gif" BORDER=0 ALT="Previous"></A>
<A class="nav" href="pceemacs.html"><IMG SRC="next.gif" BORDER=0 ALT="Next"></A>
</DIV>
<H2><A NAME="sec:3.3"><SPAN class="sec-nr">3.3</SPAN> <SPAN class="sec-title">The
test-edit-reload cycle</SPAN></A></H2>
<A NAME="sec:editreload"></A>
<P>SWI-Prolog does not enforce the use of a particular editor for
writing down Prolog source code. Editors are complicated programs that
must be mastered in detail for real productive programming and if you
are familiar with a specific editor you should not be forced to change.
You may specify your favourite editor using the Prolog flag <A class="flag" href="flags.html#flag:editor">editor</A>,
the environment variable <CODE>EDITOR</CODE> or by defining rules for
prolog_edit:edit_source/1 (see <A class="sec" href="listing.html">section
4.4</A>).
<P>The use of a built-in editor, which is selected by setting the Prolog
flag <A class="flag" href="flags.html#flag:editor">editor</A> to <CODE>pce_emacs</CODE>,
has advantages. The XPCE <B>editor</B> object around which the built-in
PceEmacs is built can be opened as a Prolog stream allowing analysis of
your source by the real Prolog system.
<H3><A NAME="sec:3.3.1"><SPAN class="sec-nr">3.3.1</SPAN> <SPAN class="sec-title">Locating
things to edit</SPAN></A></H3>
<P><A NAME="idx:TABcompletion:283"></A><A NAME="idx:completionTAB:284"></A>The
central predicate for editing something is <A NAME="idx:edit1:285"></A><A class="pred" href="listing.html#edit/1">edit/1</A>,
an extensible front-end that searches for objects (files, predicates,
modules as well as XPCE classes and methods) in the Prolog database. If
multiple matches are found it provides a choice. Together with the
built-in completion on atoms bound to the <CODE>TAB</CODE> key this
provides a quick way to edit objects:
<PRE class="code">
?- edit(country).
Please select item to edit:
1 chat:country/10 '/staff/jan/lib/prolog/chat/countr.pl':16
2 chat:country/1 '/staff/jan/lib/prolog/chat/world0.pl':72
Your choice?
</PRE>
<H3><A NAME="sec:3.3.2"><SPAN class="sec-nr">3.3.2</SPAN> <SPAN class="sec-title">Editing
and incremental compilation</SPAN></A></H3>
<P>One of the nice features of Prolog is that the code can be modified
while the program is running. Using pure Prolog you can trace a program,
find it is misbehaving, enter a <EM>break environment</EM>, modify the
source code, reload it and finally do <EM>retry</EM> on the misbehaving
predicate and try again. This sequence is not uncommon for long-running
programs. For faster programs one normally aborts after understanding
the misbehaviour, edit the source, reload it and try again.
<P>One of the nice features of SWI-Prolog is the availability of <A NAME="idx:make0:286"></A><A class="pred" href="consulting.html#make/0">make/0</A>,
a simple predicate that checks all loaded source files to see which ones
you have modified. It then reloads these files, considering the module
from which the file was loaded originally. This greatly simplifies the
trace-edit-verify development cycle. After the tracer reveals there is
something wrong with prove/3 , you do:
<PRE class="code">
?- edit(prove).
</PRE>
<P>Now edit the source, possibly switching to other files and making
multiple changes. After finishing invoke <A NAME="idx:make0:287"></A><A class="pred" href="consulting.html#make/0">make/0</A>,
either through the editor UI (<STRONG>Compile/Make</STRONG> (<CODE>Control-C
Control-M</CODE>)) or on the top-level and watch the files being
reloaded.<SUP class="fn">15<SPAN class="fn-text">Watching these files is
a good habit. If expected files are not reloaded you may have forgotten
to save them from the editor or you may have been editing the wrong file
(wrong directory).</SPAN></SUP>
<PRE class="code">
?- make.
% show compiled into photo_gallery 0.03 sec, 3,360 bytes
</PRE>
<P></BODY></HTML>
|