SWI-Prolog 3 - University of Western .SWI-Prolog is a Prolog implementation based on a subset of

  • View
    214

  • Download
    0

Embed Size (px)

Text of SWI-Prolog 3 - University of Western .SWI-Prolog is a Prolog implementation based on a subset of

  • University of AmsterdamDept. of Social Science Informatics (SWI)

    Roeterstraat 15, 1018 WB AmsterdamThe Netherlands

    Tel. (+31) 20 5256121 SSIIWWSWI-Prolog 3.3

    Reference ManualUpdated for version 3.3.7, June 2000

    Jan Wielemaker

    jan@swi.psy.uva.nl http://www.swi.psy.uva.nl/projects/SWI-Prolog/

    SWI-Prolog is a Prolog implementation based on a subset of the WAM (Warren AbstractMachine). SWI-Prolog was developed as an open Prolog environment, providing apowerful and bi-directional interface to C in an era this was unknown to other Prologimplementations. This environment is required to deal with XPCE, an object-orientedGUI system developed at SWI. XPCE is used at SWI for the development of knowledge-intensive graphical applications.

    As SWI-Prolog became more popular, a large user-community provided requirementsthat guided its development. Compatibility, portability, scalability, stability and provid-ing a powerful development environment have been the most important requirements.Edinburgh, Quintus, SICStus and the ISO-standard guide the development of the SWI-Prolog primitives.

    This document gives an overview of the features, system limits and built-in predicates.

    Copyright c 19902000, University of Amsterdam

  • Contents

    1 Introduction 71.1 SWI-Prolog . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7

    1.1.1 Other books about Prolog . . . . . . . . . . . . . . . . . . . . . . . . . . . 71.2 Status . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81.3 Compliance to the ISO standard . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81.4 Should you be using SWI-Prolog? . . . . . . . . . . . . . . . . . . . . . . . . . . . 81.5 The XPCE GUI system for Prolog . . . . . . . . . . . . . . . . . . . . . . . . . . . 91.6 Release Notes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

    1.6.1 Version 1.8 Release Notes . . . . . . . . . . . . . . . . . . . . . . . . . . . 101.6.2 Version 1.9 Release Notes . . . . . . . . . . . . . . . . . . . . . . . . . . . 101.6.3 Version 2.0 Release Notes . . . . . . . . . . . . . . . . . . . . . . . . . . . 111.6.4 Version 2.5 Release Notes . . . . . . . . . . . . . . . . . . . . . . . . . . . 111.6.5 Version 2.6 Release Notes . . . . . . . . . . . . . . . . . . . . . . . . . . . 121.6.6 Version 2.7 Release Notes . . . . . . . . . . . . . . . . . . . . . . . . . . . 121.6.7 Version 2.8 Release Notes . . . . . . . . . . . . . . . . . . . . . . . . . . . 121.6.8 Version 2.9 Release Notes . . . . . . . . . . . . . . . . . . . . . . . . . . . 121.6.9 Version 3.0 Release Notes . . . . . . . . . . . . . . . . . . . . . . . . . . . 131.6.10 Version 3.1 Release Notes . . . . . . . . . . . . . . . . . . . . . . . . . . . 131.6.11 Version 3.3 Release Notes . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

    1.7 Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14

    2 Overview 162.1 Getting started quickly . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16

    2.1.1 Starting SWI-Prolog . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162.1.2 Executing a query . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

    2.2 The users initialisation file . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172.3 Initialisation files and goals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172.4 Command line options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182.5 GNU Emacs Interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202.6 Online Help . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212.7 Query Substitutions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22

    2.7.1 Limitations of the History System . . . . . . . . . . . . . . . . . . . . . . . 222.8 Reuse of toplevel bindings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232.9 Overview of the Debugger . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232.10 Compilation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26

    2.10.1 During program development . . . . . . . . . . . . . . . . . . . . . . . . . 262.10.2 For running the result . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27

    2.11 Environment Control (Prolog flags) . . . . . . . . . . . . . . . . . . . . . . . . . . 282.12 An overview of hook predicates . . . . . . . . . . . . . . . . . . . . . . . . . . . . 332.13 Automatic loading of libraries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34

    SWI-Prolog 3.3 Reference Manual

  • Contents 3

    2.14 Garbage Collection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 352.15 Syntax Notes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35

    2.15.1 ISO Syntax Support . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 352.16 System limits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37

    2.16.1 Limits on memory areas . . . . . . . . . . . . . . . . . . . . . . . . . . . . 372.16.2 Other Limits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 372.16.3 Reserved Names . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37

    3 Built-in predicates 393.1 Notation of Predicate Descriptions . . . . . . . . . . . . . . . . . . . . . . . . . . . 393.2 Character representation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 393.3 Loading Prolog source files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40

    3.3.1 Quick load files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 453.4 Listing and Editor Interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 463.5 Verify Type of a Term . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 483.6 Comparison and Unification or Terms . . . . . . . . . . . . . . . . . . . . . . . . . 48

    3.6.1 Standard Order of Terms . . . . . . . . . . . . . . . . . . . . . . . . . . . . 483.7 Control Predicates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 503.8 Meta-Call Predicates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 513.9 ISO compliant Exception handling . . . . . . . . . . . . . . . . . . . . . . . . . . . 53

    3.9.1 Debugging and exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . 533.9.2 The exception term . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 543.9.3 Printing messages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54

    3.10 Handling signals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 563.10.1 Notes on signal handling . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57

    3.11 The block control-structure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 583.12 DCG Grammar rules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 583.13 Database . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59

    3.13.1 Update view . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 623.13.2 Indexing databases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62

    3.14 Declaring predicates properties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 623.15 Examining the program . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 633.16 Input and output . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66

    3.16.1 Input and output using implicit source and destination . . . . . . . . . . . . 663.16.2 Explicit Input and Output Streams . . . . . . . . . . . . . . . . . . . . . . . 673.16.3 Switching Between Implicit and Explicit I/O . . . . . . . . . . . . . . . . . 70

    3.17 Status of streams . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 703.18 Primitive character I/O . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 713.19 Term reading and writing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 743.20 Analysing and Constructing Terms . . . . . . . . . . . . . . . . . . . . . . . . . . . 783.21 Analysing and constructing atoms . . . . . . . . . . . . . . . . . . . . . . . . . . . 793.22 Classifying characters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 823.23 Representing text in strings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 833.24 Operators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 843.25 Character Conversion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 863.26 Arithmetic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 863.27 Arithmetic Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87

    SWI-Prolog 3.3 Reference Manual

  • 4

    3.28 Adding Arithmetic Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 903.29 List Manipulation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 913.30 Set Manipulation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 923.31 Sorting Lists . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 933.32 Finding all Solutions to a Goal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 933.33 Invoking Predicates on all Members of a List . . . . . . . . . . . . . . . . . . . . . 943.34 Forall . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 953.35 Formatted Write . . . . . . . . . . . . . . . . . . . . . . . . . . .