SWI-Prolog 3 cot5540/swi-prolog/ آ  SWI-Prolog 3.1 Reference Manual Updated for version 3.1.2, November

  • View
    0

  • Download
    0

Embed Size (px)

Text of SWI-Prolog 3 cot5540/swi-prolog/ آ  SWI-Prolog 3.1 Reference Manual Updated for version 3.1.2,...

  • University of Amsterdam Dept. of Social Science Informatics (SWI)

    Roeterstraat 15, 1018 WB Amsterdam The Netherlands

    Tel. (+31) 20 5256121 SSIIWW SWI-Prolog 3.1

    Reference Manual Updated for version 3.1.2, November 1998

    Jan Wielemaker

    jan@swi.psy.uva.nl

    SWI-Prolog is a Prolog implementation based on a subset of the WAM (Warren Abstract Machine [Warren, 1983]). SWI-Prolog has been designed and implemented such that it can easily be modified for experiments with logic programming and the relation between logic programming and other programming paradigms (such as the object oriented XPCE environment [Anjewierden & Wielemaker, 1989]). SWI-Prolog has a rich set of built-in predicates and reasonable performance, which makes it possible to develop substantial applications in it. The current version offers a module system, garbage collection and an interface to the C language.

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

    Copyright c �

    1990–1998, University of Amsterdam

  • � ������������

    1 Introduction 7 1.1 SWI-Prolog . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 1.2 Status . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 1.3 Should you be Using SWI-Prolog? . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 1.4 The XPCE GUI system for Prolog . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 1.5 Version 1.5 Release Notes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 1.6 Version 1.6 Release Notes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 1.7 Version 1.7 Release Notes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 1.8 Version 1.8 Release Notes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 1.9 Version 1.9 Release Notes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 1.10 Version 2.0 Release Notes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 1.11 Version 2.1 Release Notes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 1.12 Version 2.5 Release Notes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 1.13 Version 2.6 Release Notes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 1.14 Version 2.7 Release Notes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 1.15 Version 2.8 Release Notes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 1.16 Version 2.9 Release Notes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 1.17 Version 3.0 Release Notes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 1.18 Version 3.1 Release Notes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 1.19 Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

    2 Overview 16 2.1 Starting SWI-Prolog from the Unix Shell . . . . . . . . . . . . . . . . . . . . . . . 16

    2.1.1 Command Line Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 2.2 GNU Emacs Interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 2.3 Online Help . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 2.4 Query Substitutions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

    2.4.1 Limitations of the History System . . . . . . . . . . . . . . . . . . . . . . . 20 2.5 Reuse of toplevel bindings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 2.6 Overview of the Debugger . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 2.7 Compilation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25

    2.7.1 During program development . . . . . . . . . . . . . . . . . . . . . . . . . 25 2.7.2 For running the result . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25

    2.8 Environment Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 2.9 Automatic loading of libraries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31

    2.9.1 Notes on Automatic Loading . . . . . . . . . . . . . . . . . . . . . . . . . . 32 2.10 Garbage Collection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 2.11 Syntax Notes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32

    2.11.1 ISO Syntax Support . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 2.12 System Limits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34

    SWI-Prolog 3.1 Reference Manual

  • Contents 3

    2.12.1 Limits on Memory Areas . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 2.12.2 Other Limits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 2.12.3 Reserved Names . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36

    3 Built-In Predicates 37 3.1 Notation of Predicate Descriptions . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 3.2 Consulting Prolog Source files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37

    3.2.1 Quick Load Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 3.3 Listing and Editor Interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 3.4 Verify Type of a Term . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 3.5 Comparison and Unification or Terms . . . . . . . . . . . . . . . . . . . . . . . . . 44

    3.5.1 Standard Order of Terms . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 3.6 Control Predicates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 3.7 Meta-Call Predicates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 3.8 ISO compliant Exception handling . . . . . . . . . . . . . . . . . . . . . . . . . . . 48

    3.8.1 Debugging and exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 3.8.2 The exception term . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 3.8.3 Printing a message from an exception . . . . . . . . . . . . . . . . . . . . . 50

    3.9 Handling signals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 3.9.1 Notes on signal handling . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52

    3.10 Advanced control-structures: blocks . . . . . . . . . . . . . . . . . . . . . . . . . . 52 3.11 Grammar rule interface (phrase) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 3.12 Database . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53

    3.12.1 Indexing databases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56 3.13 Declaring Properties of Predicates . . . . . . . . . . . . . . . . . . . . . . . . . . . 56 3.14 Examining the Program . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 3.15 Input and Output . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59

    3.15.1 Input and Output Using Implicit Source and Destination . . . . . . . . . . . 60 3.15.2 Explicit Input and Output Streams . . . . . . . . . . . . . . . . . . . . . . . 61 3.15.3 Switching Between Implicit and Explicit I/O . . . . . . . . . . . . . . . . . 63

    3.16 Status of Input and Output Streams . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 3.17 Primitive Character Input and Output . . . . . . . . . . . . . . . . . . . . . . . . . . 64 3.18 Term Reading and Writing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66 3.19 Analysing and Constructing Terms . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 3.20 Analysing and Constructing Atoms . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 3.21 Representing Text in Strings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72 3.22 Operators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 3.23 Arithmetic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 3.24 Arithmetic Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75 3.25 Adding Arithmetic Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78 3.26 List Manipulation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79 3.27 Set Manipulation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80 3.28 Sorting Lists . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81 3.29 Finding all Solutions to a Goal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81 3.30 Invoking Predicates on all Members of a List . . . . . . . . . . . . . . . . . . . . . 82 3.31 Forall . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 3.32 Formatted Write . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83

    SWI-Prolog 3.1 Reference Manual

  • 4

    3.32.1 Writef . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 3.32.2 Format . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84 3.32.3 Programming Format . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86

    3.33 Terminal Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87 3.34 Operating System Interaction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87 3.35 File System Interaction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88 3.36 User Toplevel Manipulation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91 3.37 Creating a Protocol of the User Interaction . . .