YAP User’s Manual - dcc.fc.up.pt vsc/Yap/yap.pdf · a YAP User’s Manual Version 6.0.6 V´ıtor

  • View
    245

  • Download
    7

Embed Size (px)

Text of YAP User’s Manual - dcc.fc.up.pt vsc/Yap/yap.pdf · a YAP User’s Manual Version 6.0.6 V´ıtor

  • a

    YAP Users ManualVersion 6.0.6

    Vtor Santos Costa,Lus Damas,Rogerio Reis, andRuben Azevedo

  • Copyright c 1989-2000 L. Damas, V. Santos Costa and Universidade do Porto.Permission is granted to make and distribute verbatim copies of this manual provided thecopyright notice and this permission notice are preserved on all copies.

    Permission is granted to copy and distribute modified versions of this manual under the con-ditions for verbatim copying, provided that the entire resulting derived work is distributedunder the terms of a permission notice identical to this one.

    Permission is granted to copy and distribute translations of this manual into another lan-guage, under the above conditions for modified versions.

  • i

    Table of Contents

    Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1

    1 Installing YAP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31.1 Tuning the Functionality of YAP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31.2 Tuning YAP for a Particular Machine and Compiler . . . . . . . . . . . . 41.3 Tuning YAP for GCC. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

    1.3.1 Compiling Under Visual C++ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61.3.2 Compiling Under SGIs cc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7

    2 Running YAP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92.1 Running YAP Interactively . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92.2 Running Prolog Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

    3 Syntax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133.1 Syntax of Terms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133.2 Prolog Tokens . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14

    3.2.1 Numbers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143.2.1.1 Integers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143.2.1.2 Floating-point Numbers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

    3.2.2 Character Strings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153.2.3 Atoms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163.2.4 Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163.2.5 Punctuation Tokens . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173.2.6 Layout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

    3.3 Wide Character Support . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173.3.1 Wide character encodings on streams . . . . . . . . . . . . . . . . . . . . . 173.3.2 BOM: Byte Order Mark . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

    4 Loading Programs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214.1 Program loading and updating . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214.2 Changing the Compilers Behavior . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234.3 Conditional Compilation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264.4 Saving and Loading Prolog States . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26

    5 The Module System . . . . . . . . . . . . . . . . . . . . . . . . . . . 295.1 Module Concepts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 295.2 Defining a New Module . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 305.3 Using Modules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 305.4 Meta-Predicates in Modules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 315.5 Re-Exporting Predicates From Other Modules . . . . . . . . . . . . . . . . . 32

  • ii YAP Prolog Users Manual

    6 Built-In Predicates . . . . . . . . . . . . . . . . . . . . . . . . . . . . 336.1 Control Predicates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 336.2 Handling Undefined Procedures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 376.3 Message Handling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 396.4 Predicates on terms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 406.5 Predicates on Atoms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 426.6 Predicates on Characters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 446.7 Comparing Terms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 466.8 Arithmetic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 486.9 I/O Predicates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53

    6.9.1 Handling Streams and Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 536.9.2 Handling Streams and Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 586.9.3 Handling Input/Output of Terms . . . . . . . . . . . . . . . . . . . . . . . . . 596.9.4 Handling Input/Output of Characters . . . . . . . . . . . . . . . . . . . . 656.9.5 Input/Output Predicates applied to Streams . . . . . . . . . . . . . . 666.9.6 Compatible C-Prolog predicates for Terminal I/O . . . . . . . . . 686.9.7 Controlling Input/Output . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 686.9.8 Using Sockets From YAP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69

    6.10 Using the Clausal Data Base . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 716.10.1 Modification of the Data Base . . . . . . . . . . . . . . . . . . . . . . . . . . . 716.10.2 Looking at the Data Base . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 736.10.3 Using Data Base References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74

    6.11 Internal Data Base . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 756.12 The Blackboard . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 776.13 Collecting Solutions to a Goal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 786.14 Grammar Rules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 796.15 Access to Operating System Functionality . . . . . . . . . . . . . . . . . . . . 816.16 Term Modification . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 836.17 Global Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 846.18 Profiling Prolog Programs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86

    6.18.1 The Count Profiler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 876.18.2 Tick Profiler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88

    6.19 Counting Calls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 886.20 Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 896.21 Predicate Information . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 926.22 Miscellaneous . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92

    7 Library Predicates . . . . . . . . . . . . . . . . . . . . . . . . . . . 1057.1 Aggregate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1057.2 Apply Macros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1077.3 Association Lists . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1077.4 AVL Trees . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1087.5 Heaps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1097.6 List Manipulation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1107.7 Line Manipulation Utilities . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1127.8 Maplist . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1137.9 Matrix Library . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1157.10 MATLAB Package Interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118

  • iii

    7.11 Non-Backtrackable Data Structures . . . . . . . . . . . . . . . . . . . . . . . . . 1207.12 Ordered Sets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1217.13 Pseudo Random Number Integer Generator . . . . . . . . . . . . . . . . . 1227.14 Queues . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1237.15 Random Number Generator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1247.16 Read Utilities . . . . . . .