SWI-Prolog 5 - gini/prolog/  · SWI-Prolog has been designed and implemented to get a Prolog implementation

  • View
    223

  • Download
    2

Embed Size (px)

Text of SWI-Prolog 5 - gini/prolog/  · SWI-Prolog has been designed and implemented to get a Prolog...

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

    Roeterstraat 15, 1018 WB AmsterdamThe Netherlands

    Tel. (+31) 20 5256121

    SWI-Prolog 5.1Reference Manual

    Updated for version 5.1.4, December 2002

    Jan Wielemakerjan@swi.psy.uva.nlhttp://www.swi-prolog.org

    SWI-Prolog is a Prolog implementation based on a subset of the WAM (Warren Ab-stract Machine). SWI-Prolog was developed as an open Prolog environment, providinga powerful 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 19902002, University of Amsterdam

  • Contents

    1 Introduction 81.1 SWI-Prolog . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

    1.1.1 Other books about Prolog . . . . . . . . . . . . . . . . . . . . . . . . . . . 81.2 Status . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91.3 Compliance to the ISO standard . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91.4 Should you be using SWI-Prolog? . . . . . . . . . . . . . . . . . . . . . . . . . . . 91.5 The XPCE GUI system for Prolog . . . . . . . . . . . . . . . . . . . . . . . . . . . 101.6 Release Notes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

    1.6.1 Version 1.8 Release Notes . . . . . . . . . . . . . . . . . . . . . . . . . . . 111.6.2 Version 1.9 Release Notes . . . . . . . . . . . . . . . . . . . . . . . . . . . 121.6.3 Version 2.0 Release Notes . . . . . . . . . . . . . . . . . . . . . . . . . . . 121.6.4 Version 2.5 Release Notes . . . . . . . . . . . . . . . . . . . . . . . . . . . 121.6.5 Version 2.6 Release Notes . . . . . . . . . . . . . . . . . . . . . . . . . . . 131.6.6 Version 2.7 Release Notes . . . . . . . . . . . . . . . . . . . . . . . . . . . 131.6.7 Version 2.8 Release Notes . . . . . . . . . . . . . . . . . . . . . . . . . . . 131.6.8 Version 2.9 Release Notes . . . . . . . . . . . . . . . . . . . . . . . . . . . 131.6.9 Version 3.0 Release Notes . . . . . . . . . . . . . . . . . . . . . . . . . . . 141.6.10 Version 3.1 Release Notes . . . . . . . . . . . . . . . . . . . . . . . . . . . 141.6.11 Version 3.3 Release Notes . . . . . . . . . . . . . . . . . . . . . . . . . . . 141.6.12 Version 3.4 Release Notes . . . . . . . . . . . . . . . . . . . . . . . . . . . 151.6.13 Version 4.0 Release Notes . . . . . . . . . . . . . . . . . . . . . . . . . . . 161.6.14 Version 5.0 Release Notes . . . . . . . . . . . . . . . . . . . . . . . . . . . 161.6.15 Version 5.1 Release Notes . . . . . . . . . . . . . . . . . . . . . . . . . . . 16

    1.7 Donate to the SWI-Prolog project . . . . . . . . . . . . . . . . . . . . . . . . . . . 161.8 Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

    2 Overview 182.1 Getting started quickly . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18

    2.1.1 Starting SWI-Prolog . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182.1.2 Executing a query . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

    2.2 The users initialisation file . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192.3 Initialisation files and goals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202.4 Command line options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202.5 GNU Emacs Interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232.6 Online Help . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232.7 Query Substitutions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24

    2.7.1 Limitations of the History System . . . . . . . . . . . . . . . . . . . . . . . 252.8 Reuse of toplevel bindings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252.9 Overview of the Debugger . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262.10 Compilation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

    SWI-Prolog 5.1 Reference Manual

  • Contents 3

    2.10.1 During program development . . . . . . . . . . . . . . . . . . . . . . . . . 292.10.2 For running the result . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

    2.11 Environment Control (Prolog flags) . . . . . . . . . . . . . . . . . . . . . . . . . . 322.12 An overview of hook predicates . . . . . . . . . . . . . . . . . . . . . . . . . . . . 372.13 Automatic loading of libraries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 392.14 Garbage Collection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 402.15 Syntax Notes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40

    2.15.1 ISO Syntax Support . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 402.16 System limits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42

    2.16.1 Limits on memory areas . . . . . . . . . . . . . . . . . . . . . . . . . . . . 422.16.2 Other Limits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 422.16.3 Reserved Names . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44

    3 Initialising and Managing a Prolog Project 453.1 The project source-files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45

    3.1.1 File Names and Locations . . . . . . . . . . . . . . . . . . . . . . . . . . . 453.1.2 Project Special Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46

    3.2 Using modules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 473.3 The test-edit-reload cycle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48

    3.3.1 Locating things to edit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 483.3.2 Editing and incremental compilation . . . . . . . . . . . . . . . . . . . . . . 48

    3.4 Using the PceEmacs built-in editor . . . . . . . . . . . . . . . . . . . . . . . . . . . 493.4.1 Activating PceEmacs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 493.4.2 Bluffing through PceEmacs . . . . . . . . . . . . . . . . . . . . . . . . . . 493.4.3 Prolog Mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51

    3.5 The Graphical Debugger . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 533.5.1 Invoking the window-based debugger . . . . . . . . . . . . . . . . . . . . . 53

    3.6 The Prolog Navigator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 533.7 Accessing the IDE from your program . . . . . . . . . . . . . . . . . . . . . . . . . 543.8 Summary of the iDE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54

    4 Built-in predicates 564.1 Notation of Predicate Descriptions . . . . . . . . . . . . . . . . . . . . . . . . . . . 564.2 Character representation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 564.3 Loading Prolog source files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57

    4.3.1 Quick load files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 634.4 Listing and Editor Interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 644.5 Verify Type of a Term . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 654.6 Comparison and Unification or Terms . . . . . . . . . . . . . . . . . . . . . . . . . 66

    4.6.1 Standard Order of Terms . . . . . . . . . . . . . . . . . . . . . . . . . . . . 664.7 Control Predicates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 684.8 Meta-Call Predicates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 694.9 ISO compliant Exception handling . . . . . . . . . . . . . . . . . . . . . . . . . . . 72

    4.9.1 Debugging and exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . 734.9.2 The exception term . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 734.9.3 Printing messages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73

    4.10 Handling signals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75

    SWI-Prolog 5.1 Reference Manual

  • 4

    4.10.1 Notes on signal handling . . . . . . . . . . . . . . . . . . . . . . . . . . . . 774.11 The block control-structure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 774.12 DCG Grammar rules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 784.13 Database . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79

    4.13.1 Update view . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 814.13.2 Indexing databases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81

    4.14 Declaring predicates properties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 824.15 Examining the program . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 834.16 Input and output . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86

    4.16.1 ISO Input and Output Streams . . . . . . . . . . . . . . . . . . . . . . . . . 864.16.2 Edinburgh-style I/O .