SWI-Prolog 6 SWI-Prolog ... 3 Initialising and Managing a Prolog Project62 3.1 The project source files

  • View
    239

  • Download
    7

Embed Size (px)

Text of SWI-Prolog 6 SWI-Prolog ... 3 Initialising and Managing a Prolog Project62 3.1 The project source...

  • University of AmsterdamKruislaan 419, 1098 VA Amsterdam

    VU University AmsterdamDe Boelelaan 1081a, 1081 HV Amsterdam

    The Netherlands

    SWI-Prolog 6.1Reference Manual

    Updated for version 6.1.5, May 2012

    Jan WielemakerJ.Wielemaker@cs.vu.nl

    http://www.swi-prolog.org

    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 a pow-erful and bi-directional interface to C in an era when 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 requirements thatguided its development. Compatibility, portability, scalability, stability and providing apowerful development environment have been the most important requirements. Edin-burgh, Quintus, SICStus and the ISO-standard guide the development of the SWI-Prologprimitives.

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

    Copyright c 19902012, University of Amsterdam

  • Contents

    1 Introduction 101.1 SWI-Prolog . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

    1.1.1 Books about Prolog . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101.2 Status . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111.3 Compliance to the ISO standard . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111.4 Should you be using SWI-Prolog? . . . . . . . . . . . . . . . . . . . . . . . . . . . 111.5 The XPCE GUI system for Prolog . . . . . . . . . . . . . . . . . . . . . . . . . . . 121.6 Release Notes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131.7 Donate to the SWI-Prolog project . . . . . . . . . . . . . . . . . . . . . . . . . . . 191.8 Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

    2 Overview 212.1 Getting started quickly . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21

    2.1.1 Starting SWI-Prolog . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212.1.2 Executing a query . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22

    2.2 The users initialisation file . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222.3 Initialisation files and goals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232.4 Command-line options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

    2.4.1 Controlling the stack-sizes . . . . . . . . . . . . . . . . . . . . . . . . . . . 242.4.2 Running goals from the commandline . . . . . . . . . . . . . . . . . . . . . 252.4.3 Compiler options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252.4.4 Maintenance options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26

    2.5 GNU Emacs Interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262.6 Online Help . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 272.7 Command-line history . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 282.8 Reuse of top-level bindings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 282.9 Overview of the Debugger . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 292.10 Compilation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32

    2.10.1 During program development . . . . . . . . . . . . . . . . . . . . . . . . . 322.10.2 For running the result . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33

    2.11 Environment Control (Prolog flags) . . . . . . . . . . . . . . . . . . . . . . . . . . 362.12 An overview of hook predicates . . . . . . . . . . . . . . . . . . . . . . . . . . . . 462.13 Automatic loading of libraries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 472.14 Garbage Collection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 492.15 Syntax Notes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49

    2.15.1 ISO Syntax Support . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 492.16 Rational trees (cyclic terms) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 532.17 Just-in-time clause indexing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54

    2.17.1 Future directions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 552.17.2 Indexing and portability . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55

    SWI-Prolog 6.1 Reference Manual

  • Contents 3

    2.18 Wide character support . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 552.18.1 Wide character encodings on streams . . . . . . . . . . . . . . . . . . . . . 56

    2.19 System limits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 572.19.1 Limits on memory areas . . . . . . . . . . . . . . . . . . . . . . . . . . . . 572.19.2 Other Limits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 592.19.3 Reserved Names . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59

    2.20 SWI-Prolog and 64-bit machines . . . . . . . . . . . . . . . . . . . . . . . . . . . . 602.20.1 Supported platforms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 602.20.2 Comparing 32- and 64-bits Prolog . . . . . . . . . . . . . . . . . . . . . . . 602.20.3 Choosing between 32- and 64-bits Prolog . . . . . . . . . . . . . . . . . . . 60

    3 Initialising and Managing a Prolog Project 623.1 The project source files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62

    3.1.1 File Names and Locations . . . . . . . . . . . . . . . . . . . . . . . . . . . 623.1.2 Project Special Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 633.1.3 International source files . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64

    3.2 Using modules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 643.3 The test-edit-reload cycle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65

    3.3.1 Locating things to edit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 653.3.2 Editing and incremental compilation . . . . . . . . . . . . . . . . . . . . . . 66

    3.4 Using the PceEmacs built-in editor . . . . . . . . . . . . . . . . . . . . . . . . . . . 663.4.1 Activating PceEmacs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 663.4.2 Bluffing through PceEmacs . . . . . . . . . . . . . . . . . . . . . . . . . . 673.4.3 Prolog Mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69

    3.5 The Graphical Debugger . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 713.5.1 Invoking the window-based debugger . . . . . . . . . . . . . . . . . . . . . 71

    3.6 The Prolog Navigator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 723.7 Cross-referencer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 723.8 Accessing the IDE from your program . . . . . . . . . . . . . . . . . . . . . . . . . 743.9 Summary of the IDE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75

    4 Built-in Predicates 764.1 Notation of Predicate Descriptions . . . . . . . . . . . . . . . . . . . . . . . . . . . 764.2 Character representation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 764.3 Loading Prolog source files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77

    4.3.1 Conditional compilation and program transformation . . . . . . . . . . . . . 874.3.2 Loading files, active code and threads . . . . . . . . . . . . . . . . . . . . . 904.3.3 Quick load files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92

    4.4 Editor Interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 924.4.1 Customizing the editor interface . . . . . . . . . . . . . . . . . . . . . . . . 93

    4.5 List the program, predicates or clauses . . . . . . . . . . . . . . . . . . . . . . . . . 944.6 Verify Type of a Term . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 954.7 Comparison and Unification of Terms . . . . . . . . . . . . . . . . . . . . . . . . . 96

    4.7.1 Standard Order of Terms . . . . . . . . . . . . . . . . . . . . . . . . . . . . 974.7.2 Special unification and comparison predicates . . . . . . . . . . . . . . . . . 98

    4.8 Control Predicates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1004.9 Meta-Call Predicates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101

    SWI-Prolog 6.1 Reference Manual

  • 4

    4.10 ISO compliant Exception handling . . . . . . . . . . . . . . . . . . . . . . . . . . . 1054.10.1 Debugging and exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . 1054.10.2 The exception term . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1064.10.3 Printing messages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106

    4.11 Handling signals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1094.11.1 Notes on signal handling . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110

    4.12 DCG Grammar rules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1114.13 Database . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112

    4.13.1 Update view . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1154.13.2 Indexing databases . . . . . . . . . . . . . . .