SWI-Prolog 3 - cs.fsu. cap5605/swi-prolog/  · logic programming and other programming paradigms

  • View
    214

  • Download
    0

Embed Size (px)

Text of SWI-Prolog 3 - cs.fsu. cap5605/swi-prolog/  · logic programming and other programming paradigms

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

    Roeterstraat 15, 1018 WB AmsterdamThe Netherlands

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

    Reference ManualUpdated 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 AbstractMachine [Warren, 1983]). SWI-Prolog has been designed and implemented such that itcan easily be modified for experiments with logic programming and the relation betweenlogic programming and other programming paradigms (such as the object oriented XPCEenvironment [Anjewierden & Wielemaker, 1989]). SWI-Prolog has a rich set of built-inpredicates and reasonable performance, which makes it possible to develop substantialapplications in it. The current version offers a module system, garbage collection and aninterface to the C language.

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

    Copyright c

    19901998, University of Amsterdam

  • 1 Introduction 71.1 SWI-Prolog . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71.2 Status . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81.3 Should you be Using SWI-Prolog? . . . . . . . . . . . . . . . . . . . . . . . . . . . 81.4 The XPCE GUI system for Prolog . . . . . . . . . . . . . . . . . . . . . . . . . . . 91.5 Version 1.5 Release Notes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101.6 Version 1.6 Release Notes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101.7 Version 1.7 Release Notes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101.8 Version 1.8 Release Notes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111.9 Version 1.9 Release Notes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111.10 Version 2.0 Release Notes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111.11 Version 2.1 Release Notes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121.12 Version 2.5 Release Notes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131.13 Version 2.6 Release Notes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131.14 Version 2.7 Release Notes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141.15 Version 2.8 Release Notes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141.16 Version 2.9 Release Notes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141.17 Version 3.0 Release Notes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141.18 Version 3.1 Release Notes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151.19 Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

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

    2.1.1 Command Line Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162.2 GNU Emacs Interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182.3 Online Help . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182.4 Query Substitutions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

    2.4.1 Limitations of the History System . . . . . . . . . . . . . . . . . . . . . . . 202.5 Reuse of toplevel bindings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202.6 Overview of the Debugger . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222.7 Compilation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25

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

    2.8 Environment Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 272.9 Automatic loading of libraries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31

    2.9.1 Notes on Automatic Loading . . . . . . . . . . . . . . . . . . . . . . . . . . 322.10 Garbage Collection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 322.11 Syntax Notes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32

    2.11.1 ISO Syntax Support . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 322.12 System Limits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34

    SWI-Prolog 3.1 Reference Manual

  • Contents 3

    2.12.1 Limits on Memory Areas . . . . . . . . . . . . . . . . . . . . . . . . . . . . 342.12.2 Other Limits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 342.12.3 Reserved Names . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36

    3 Built-In Predicates 373.1 Notation of Predicate Descriptions . . . . . . . . . . . . . . . . . . . . . . . . . . . 373.2 Consulting Prolog Source files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37

    3.2.1 Quick Load Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 413.3 Listing and Editor Interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 423.4 Verify Type of a Term . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 433.5 Comparison and Unification or Terms . . . . . . . . . . . . . . . . . . . . . . . . . 44

    3.5.1 Standard Order of Terms . . . . . . . . . . . . . . . . . . . . . . . . . . . . 443.6 Control Predicates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 453.7 Meta-Call Predicates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 473.8 ISO compliant Exception handling . . . . . . . . . . . . . . . . . . . . . . . . . . . 48

    3.8.1 Debugging and exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . 493.8.2 The exception term . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 493.8.3 Printing a message from an exception . . . . . . . . . . . . . . . . . . . . . 50

    3.9 Handling signals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 503.9.1 Notes on signal handling . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52

    3.10 Advanced control-structures: blocks . . . . . . . . . . . . . . . . . . . . . . . . . . 523.11 Grammar rule interface (phrase) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 533.12 Database . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53

    3.12.1 Indexing databases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 563.13 Declaring Properties of Predicates . . . . . . . . . . . . . . . . . . . . . . . . . . . 563.14 Examining the Program . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 573.15 Input and Output . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59

    3.15.1 Input and Output Using Implicit Source and Destination . . . . . . . . . . . 603.15.2 Explicit Input and Output Streams . . . . . . . . . . . . . . . . . . . . . . . 613.15.3 Switching Between Implicit and Explicit I/O . . . . . . . . . . . . . . . . . 63

    3.16 Status of Input and Output Streams . . . . . . . . . . . . . . . . . . . . . . . . . . . 633.17 Primitive Character Input and Output . . . . . . . . . . . . . . . . . . . . . . . . . . 643.18 Term Reading and Writing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 663.19 Analysing and Constructing Terms . . . . . . . . . . . . . . . . . . . . . . . . . . . 693.20 Analysing and Constructing Atoms . . . . . . . . . . . . . . . . . . . . . . . . . . . 713.21 Representing Text in Strings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 723.22 Operators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 733.23 Arithmetic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 733.24 Arithmetic Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 753.25 Adding Arithmetic Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 783.26 List Manipulation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 793.27 Set Manipulation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 803.28 Sorting Lists . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 813.29 Finding all Solutions to a Goal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 813.30 Invoking Predicates on all Members of a List . . . . . . . . . . . . . . . . . . . . . 823.31 Forall . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 833.32 Formatted Write . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83

    SWI-Prolog 3.1 Reference Manual

  • 4

    3.32.1 Writef . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 833.32.2 Format . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 843.32.3 Programming Format . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86

    3.33 Terminal Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 873.34 Operating System Interaction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 873.35 File System Interaction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 883.36 User Toplevel Manipulation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 913.37 Creating a Protocol of the User Interaction . . . . . . . . . . . . . . . . . . . . . . . 923.38 Debugging and Tracing Programs . . . . . . . . . . . . . . . . . . . . . . . . . . . 923.39 Obtaining Runtime Statistics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 943.40