File: swiorother.html

package info (click to toggle)
swi-prolog 7.2.3%2Bdfsg-6
  • links: PTS, VCS
  • area: main
  • in suites: stretch
  • size: 84,180 kB
  • ctags: 45,684
  • sloc: ansic: 330,358; perl: 268,104; sh: 6,795; java: 4,904; makefile: 4,561; cpp: 4,153; ruby: 1,594; yacc: 843; xml: 82; sed: 12; sql: 6
file content (337 lines) | stat: -rw-r--r-- 8,066 bytes parent folder | download
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
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">

<html>
<head>
<title>SWI-Prolog 7.3.6 Reference Manual: Section 1.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="status.html">
<link rel="next" href="sponsor.html">

<style type="text/css">

/* Style sheet for SWI-Prolog latex2html
*/

dd.defbody
{ margin-bottom: 1em;
}

dt.pubdef, dt.multidef
{ color: #fff;
padding: 2px 10px 0px 10px;
margin-bottom: 5px;
font-size: 18px;
vertical-align: middle;
overflow: hidden;
}

dt.pubdef { background-color: #0c3d6e; }
dt.multidef { background-color: #ef9439; }

.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: #fff;
}

div.caption
{ width: 80%;
margin: auto;
text-align:center;
}

/* Footnotes */
.fn {
color: red;
font-size: 70%;
}

.fn-text, .fnp {
position: absolute;
top: auto;
left: 10%;
border: 1px solid #000;
box-shadow: 5px 5px 5px #888;
display: none;
background: #fff;
color: #000;
margin-top: 25px;
padding: 8px 12px;
font-size: larger;
}

sup:hover span.fn-text
{ display: block;
}

/* Lists */

dl.latex
{ margin-top: 1ex;
margin-bottom: 0.5ex;
}

dl.latex dl.latex dd.defbody
{ margin-bottom: 0.5ex;
}

/* PlDoc Tags */

dl.tags
{ font-size: 90%;
margin-left: 5ex;
margin-top: 1ex;
margin-bottom: 0.5ex;
}

dl.tags dt
{ margin-left: 0pt;
font-weight: bold;
}

dl.tags dd
{ margin-left: 3ex;
}

td.param
{ font-style: italic;
font-weight: bold;
}

/* Index */

dt.index-sep
{ font-weight: bold;
font-size: +1;
margin-top: 1ex;
}

/* Tables */

table.center
{ margin: auto;
}

table.latex
{ border-collapse:collapse;
}

table.latex tr
{ vertical-align: text-top;
}

table.latex td,th
{ padding: 2px 1em;
}

table.latex tr.hline td,th
{ border-top: 1px solid black;
}

table.frame-box
{ border: 2px solid black;
}

</style>
</head>
<body style="background:white">
<div class="navigate"><a class="nav" href="index.html"><img src="home.gif" alt="Home"></a>
<a class="nav" href="Contents.html"><img src="index.gif" alt="Contents"></a>
<a class="nav" href="DocIndex.html"><img src="yellow_pages.gif" alt="Index"></a>
<a class="nav" href="summary.html"><img src="info.gif" alt="Summary"></a>
<a class="nav" href="status.html"><img src="prev.gif" alt="Previous"></a>
<a class="nav" href="sponsor.html"><img src="next.gif" alt="Next"></a>
</div>
<h2 id="sec:swiorother"><a id="sec:1.3"><span class="sec-nr">1.3</span> <span class="sec-title">Should 
I be using SWI-Prolog?</span></a></h2>

<a id="sec:swiorother"></a>

<p>There are a number of reasons why it might be better to choose a 
commercial, or another free, Prolog system:

<p>
<ul class="latex">
<li><i>SWI-Prolog comes with no warranties</i><br>
Although the developers or the community often provide a work-around or 
a fix for a bug, there is no place you can go to for guaranteed support. 
However, the full source archive is available and can be used to compile 
and debug SWI-Prolog using free tools on all major platforms. Users 
requiring more support should ensure access to knowledgeable developers.

<p>
<li><i>Performance is your first concern</i><br>
Various free and commercial systems have better performance. But, 
`standard' Prolog benchmarks disregard many factors that are often 
critical to the performance of large applications. SWI-Prolog is not 
good at fast calling of simple predicates and if-then-else selection 
based on simple built-in tests, but it is fast with dynamic code, 
meta-calling and predicates that contain large numbers of clauses. Many 
of SWI-Prolog's built-in predicates are written in C and have excellent 
performance.

<p>
<li><i>You need features not offered by SWI-Prolog</i><br>
Although SWI-Prolog has many features, it also lacks some important 
features. The most well known is probably <em>tabling</em>
<cite><a class="cite" href="Bibliography.html#oai:CiteSeerPSU:36493">Freire <em>et 
al.</em>, 1997</a></cite>. If you require additional features and you 
have resources, be it financial or expertise, please contact the 
developers.
</ul>

<p>On the other hand, SWI-Prolog offers some facilities that are widely 
appreciated by users:

<p>
<ul class="latex">
<li><i>Nice environment</i><br>
SWI-Prolog provides a good command line environment, including `Do What 
I Mean', autocompletion, history and a tracer that operates on single 
key strokes. The system automatically recompiles modified parts of the 
source code using the <a id="idx:make0:1"></a><a class="pred" href="consulting.html#make/0">make/0</a> 
command. The system can be instructed to open an arbitrary editor on the 
right file and line based on its source database. It ships with various 
graphical tools and can be combined with the SWI-Prolog editor, PDT 
(Eclipse plugin for Prolog) or GNU-Emacs.

<p>
<li><i>Fast compiler</i><br>
Even very large applications can be loaded in seconds on most machines. 
If this is not enough, there is the Quick Load Format. See <a id="idx:qcompile1:2"></a><a class="pred" href="consulting.html#qcompile/1">qcompile/1</a> 
and <a id="idx:qsaveprogram2:3"></a><a class="pred" href="runtime.html#qsave_program/2">qsave_program/2</a>.

<p>
<li><i>Transparent compiled code</i><br>
SWI-Prolog compiled code can be treated just as interpreted code: you 
can list it, trace it, etc. This implies you do not have to decide 
beforehand whether a module should be loaded for debugging or not, and 
the performance of debugged code is close to that of normal operation.

<p>
<li><i>Source level debugger</i><br>
The source level debugger provides a good overview of your current 
location in the search tree, variable bindings, your source code and 
open choice points. Choice point inspection provides meaningful insight 
to both novices and experienced users. Avoiding unintended choice points 
often provides a huge increase in performance and a huge saving in 
memory usage.

<p>
<li><i>Profiling</i><br>
SWI-Prolog offers an execution profiler with either textual output or 
graphical output. Finding and improving hotspots in a Prolog program may 
result in huge speedups.

<p>
<li><i>Flexibility</i><br>
SWI-Prolog can easily be integrated with C, supporting non-determinism 
in Prolog calling C as well as C calling Prolog (see <a class="sec" href="foreign.html">section 
10</a>). It can also be <em>embedded</em> in external programs (see
<a class="sec" href="plld.html">section 10.5</a>). System predicates can 
be redefined locally to provide compatibility with other Prolog systems.

<p>
<li><i>Threads</i><br>
Robust support for multiple threads may improve performance and is a key 
enabling factor for deploying Prolog in server applications.

<p>
<li><i>Interfaces</i><br>
SWI-Prolog ships with many extension packages that provide robust 
interfaces to processes, encryption, TCP/IP, TIPC, ODBC, SGML/XML/HTML, 
RDF, HTTP, graphics and much more.
</ul>

<p></body></html>