SWI Prolog 5.8.3

  • View
    67

  • Download
    2

Embed Size (px)

Text of SWI Prolog 5.8.3

University of AmsterdamKruislaan 419, 1098 VA Amsterdam

VU University AmsterdamDe Boelelaan 1081a, 1081 HV Amsterdam The Netherlands

SWI-Prolog 5.8Reference ManualUpdated for version 5.8.3, January 2010

Jan Wielemaker J.Wielemaker@cs.vu.nl http://www.swi-prolog.org

SWI-Prolog is a Prolog implementation based on a subset of the WAM (Warren Abstract Machine). SWI-Prolog was developed as an open Prolog environment, providing a powerful and bi-directional interface to C in an era this was unknown to other Prolog implementations. This environment is required to deal with XPCE, an object-oriented GUI system developed at SWI. XPCE is used at SWI for the development of knowledgeintensive graphical applications. As SWI-Prolog became more popular, a large user-community provided requirements that guided its development. Compatibility, portability, scalability, stability and providing a powerful development environment have been the most important requirements. Edinburgh, Quintus, SICStus and the ISO-standard guide the development of the SWIProlog primitives. This document gives an overview of the features, system limits and built-in predicates.

Copyright c 19902010, University of Amsterdam

Contents1 Introduction 1.1 SWI-Prolog . . . . . . . . . . . . 1.1.1 Books about Prolog . . . . 1.2 Status . . . . . . . . . . . . . . . 1.3 Compliance to the ISO standard . 1.4 Should you be using SWI-Prolog? 1.5 The XPCE GUI system for Prolog 1.6 Release Notes . . . . . . . . . . . 1.7 Donate to the SWI-Prolog project 1.8 Acknowledgements . . . . . . . . 10 10 10 11 11 11 12 13 19 19 21 21 21 22 22 23 23 26 27 28 28 29 32 32 33 36 44 45 47 47 47 50 50 51 52 52 53 55 55

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

2

Overview 2.1 Getting started quickly . . . . . . . . . . . . 2.1.1 Starting SWI-Prolog . . . . . . . . . 2.1.2 Executing a query . . . . . . . . . . 2.2 The users initialisation le . . . . . . . . . . 2.3 Initialisation les and goals . . . . . . . . . . 2.4 Command-line options . . . . . . . . . . . . 2.5 GNU Emacs Interface . . . . . . . . . . . . . 2.6 Online Help . . . . . . . . . . . . . . . . . . 2.7 Command-line history . . . . . . . . . . . . 2.8 Reuse of top-level bindings . . . . . . . . . . 2.9 Overview of the Debugger . . . . . . . . . . 2.10 Compilation . . . . . . . . . . . . . . . . . . 2.10.1 During program development . . . . 2.10.2 For running the result . . . . . . . . . 2.11 Environment Control (Prolog ags) . . . . . 2.12 An overview of hook predicates . . . . . . . 2.13 Automatic loading of libraries . . . . . . . . 2.14 Garbage Collection . . . . . . . . . . . . . . 2.15 Syntax Notes . . . . . . . . . . . . . . . . . 2.15.1 ISO Syntax Support . . . . . . . . . 2.16 Innite trees (cyclic terms) . . . . . . . . . . 2.17 Wide character support . . . . . . . . . . . . 2.17.1 Wide character encodings on streams 2.18 System limits . . . . . . . . . . . . . . . . . 2.18.1 Limits on memory areas . . . . . . . 2.18.2 Other Limits . . . . . . . . . . . . . 2.18.3 Reserved Names . . . . . . . . . . . 2.19 SWI-Prolog and 64-bit machines . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . .

SWI-Prolog 5.8 Reference Manual

Contents

3

2.19.1 Supported platforms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.19.2 Comparing 32- and 64-bits Prolog . . . . . . . . . . . . . . . . . . . . . . . 2.19.3 Choosing between 32- and 64-bits Prolog . . . . . . . . . . . . . . . . . . . 3 Initialising and Managing a Prolog Project 3.1 The project source-les . . . . . . . . . . . . 3.1.1 File Names and Locations . . . . . . 3.1.2 Project Special Files . . . . . . . . . 3.1.3 International source les . . . . . . . 3.2 Using modules . . . . . . . . . . . . . . . . 3.3 The test-edit-reload cycle . . . . . . . . . . . 3.3.1 Locating things to edit . . . . . . . . 3.3.2 Editing and incremental compilation . 3.4 Using the PceEmacs built-in editor . . . . . . 3.4.1 Activating PceEmacs . . . . . . . . . 3.4.2 Blufng through PceEmacs . . . . . 3.4.3 Prolog Mode . . . . . . . . . . . . . 3.5 The Graphical Debugger . . . . . . . . . . . 3.5.1 Invoking the window-based debugger 3.6 The Prolog Navigator . . . . . . . . . . . . . 3.7 Cross referencer . . . . . . . . . . . . . . . . 3.8 Accessing the IDE from your program . . . . 3.9 Summary of the IDE . . . . . . . . . . . . .

55 55 56 57 57 57 58 59 59 60 60 61 61 61 62 64 66 66 67 67 69 70

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

4

Built-in predicates 4.1 Notation of Predicate Descriptions . . . . . . . . . . . . . . 4.2 Character representation . . . . . . . . . . . . . . . . . . . 4.3 Loading Prolog source les . . . . . . . . . . . . . . . . . . 4.3.1 Conditional compilation and program transformation 4.3.2 Loading les, active code and threads . . . . . . . . 4.3.3 Quick load les . . . . . . . . . . . . . . . . . . . . 4.4 Listing and Editor Interface . . . . . . . . . . . . . . . . . . 4.5 Verify Type of a Term . . . . . . . . . . . . . . . . . . . . . 4.6 Comparison and Unication of Terms . . . . . . . . . . . . 4.6.1 Standard Order of Terms . . . . . . . . . . . . . . . 4.6.2 Special unication and comparison predicates . . . . 4.7 Control Predicates . . . . . . . . . . . . . . . . . . . . . . . 4.8 Meta-Call Predicates . . . . . . . . . . . . . . . . . . . . . 4.9 ISO compliant Exception handling . . . . . . . . . . . . . . 4.9.1 Debugging and exceptions . . . . . . . . . . . . . . 4.9.2 The exception term . . . . . . . . . . . . . . . . . . 4.9.3 Printing messages . . . . . . . . . . . . . . . . . . 4.10 Handling signals . . . . . . . . . . . . . . . . . . . . . . . 4.10.1 Notes on signal handling . . . . . . . . . . . . . . . 4.11 The block control-structure . . . . . . . . . . . . . . . . . 4.12 DCG Grammar rules . . . . . . . . . . . . . . . . . . . . . 4.13 Database . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . .

71 . 71 . 71 . 72 . 79 . 82 . 83 . 83 . 85 . 86 . 87 . 88 . 89 . 91 . 94 . 95 . 95 . 95 . 97 . 99 . 99 . 100 . 101

SWI-Prolog 5.8 Reference Manual

4

4.14 4.15 4.16

4.17 4.18 4.19 4.20 4.21 4.22

4.23 4.24 4.25 4.26

4.27 4.28 4.29 4.30 4.31 4.32

4.33 4.34

4.35 4.36 4.37 4.38 4.39 4.40

4.13.1 Update view . . . . . . . . . . . . . . . . . . 4.13.2 Indexing databases . . . . . . . . . . . . . . . Declaring predicates properties . . . . . . . . . . . . . Exam