Manual Sicstus Prolog 410

1404
SICStus Prolog User’s Manual Mats Carlsson et al. Swedish Institute of Computer Science PO Box 1263 SE-164 29 Kista, Sweden Release 4.2.1 February 2012 Swedish Institute of Computer Science [email protected] http://www.sics.se/sicstus/

Transcript of Manual Sicstus Prolog 410

  • SICStus Prolog Users ManualMats Carlsson et al.

    Swedish Institute of Computer SciencePO Box 1263

    SE-164 29 Kista, Sweden

    Release 4.2.1February 2012

    Swedish Institute of Computer [email protected] http://www.sics.se/sicstus/

  • Copyright c 1995-2012 SICS

    Swedish Institute of Computer SciencePO Box 1263SE-164 29 Kista, Sweden

    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, except that this permission noticemay be stated in a translation approved by SICS.

  • iTable of Contents

    Introduction : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 1

    Acknowledgments : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 3

    1 Notational Conventions : : : : : : : : : : : : : : : : : : : : : : : : 51.1 Keyboard Characters : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 51.2 Mode Spec : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 51.3 Development and Runtime Systems : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 51.4 Function Prototypes : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 51.5 ISO Compliance : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 6

    2 Glossary : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 7

    3 How to Run Prolog : : : : : : : : : : : : : : : : : : : : : : : : : : : 213.1 Getting Started : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 213.2 Reading in Programs : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 223.3 Inserting Clauses at the Terminal : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 223.4 Queries and Directives : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 22

    3.4.1 Queries : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 233.4.2 Directives : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 24

    3.5 Syntax Errors : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 253.6 Undefined Predicates : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 263.7 Program Execution And Interruption : : : : : : : : : : : : : : : : : : : : : : : : : : 263.8 Exiting From The Top-Level : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 273.9 Nested ExecutionsBreak : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 273.10 Saving and Restoring Program States : : : : : : : : : : : : : : : : : : : : : : : : 273.11 SICStus Prolog IDE : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 293.12 Emacs Interface : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 32

    3.12.1 Installation : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 323.12.1.1 Quick-Start : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 323.12.1.2 Customizing Emacs : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 333.12.1.3 Enabling Emacs Support for SICStus : : : : : : : : : : : : : : : 333.12.1.4 Enabling Emacs Support for SICStus Documentation

    : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 343.12.2 Basic Configuration : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 343.12.3 Usage : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 353.12.4 Mode Line : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 373.12.5 Configuration : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 383.12.6 Tips : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 41

    3.12.6.1 Font-locking : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 413.12.6.2 Auto-fill Mode : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 413.12.6.3 Speed : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 413.12.6.4 Changing Colors : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 42

  • ii SICStus Prolog

    4 The Prolog Language : : : : : : : : : : : : : : : : : : : : : : : : : 434.1 Syntax : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 43

    4.1.1 Overview : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 434.1.2 Terms : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 43

    4.1.2.1 Overview : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 434.1.2.2 Integers : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 434.1.2.3 Floating-point Numbers : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 444.1.2.4 Atoms : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 444.1.2.5 Variables : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 444.1.2.6 Foreign Terms : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 45

    4.1.3 Compound Terms : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 454.1.3.1 Lists : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 464.1.3.2 Strings As Lists : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 46

    4.1.4 Character Escaping : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 474.1.5 Operators and their Built-in Predicates : : : : : : : : : : : : : : : : : : : 47

    4.1.5.1 Overview : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 474.1.5.2 Manipulating and Inspecting Operators : : : : : : : : : : : : : : 504.1.5.3 Syntax Restrictions : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 504.1.5.4 Built-in Operators : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 51

    4.1.6 Commenting : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 524.1.7 Formal Syntax : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 52

    4.1.7.1 Overview : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 524.1.7.2 Notation : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 524.1.7.3 Syntax of Sentences as Terms : : : : : : : : : : : : : : : : : : : : : : : : 534.1.7.4 Syntax of Terms as Tokens : : : : : : : : : : : : : : : : : : : : : : : : : : 544.1.7.5 Syntax of Tokens as Character Strings : : : : : : : : : : : : : : : 564.1.7.6 Escape Sequences : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 594.1.7.7 Notes : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 60

    4.1.8 Summary of Predicates : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 604.2 Semantics : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 61

    4.2.1 Programs : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 614.2.2 Types of Predicates Supplied with SICStus Prolog : : : : : : : : 63

    4.2.2.1 Hook Predicates : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 634.2.2.2 Extendible Predicates : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 63

    4.2.3 Control Structures : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 634.2.3.1 The Cut : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 644.2.3.2 Disjunction : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 664.2.3.3 If-Then-Else : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 674.2.3.4 Negation as Failure : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 684.2.3.5 Do-Loops : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 684.2.3.6 Other Control Structures : : : : : : : : : : : : : : : : : : : : : : : : : : : : 72

    4.2.4 Declarative and Procedural Semantics : : : : : : : : : : : : : : : : : : : : 734.2.5 Meta-Calls : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 764.2.6 Exceptions Related to Procedure Calls : : : : : : : : : : : : : : : : : : : : 764.2.7 Occurs-Check : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 764.2.8 Summary of Control Predicates : : : : : : : : : : : : : : : : : : : : : : : : : : : 77

    4.3 Loading Programs : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 784.3.1 Overview : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 78

  • iii

    4.3.2 The Load Predicates : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 784.3.3 Redefining Procedures during Program Execution : : : : : : : : : 814.3.4 Declarations and Initializations : : : : : : : : : : : : : : : : : : : : : : : : : : : 81

    4.3.4.1 Multifile Declarations : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 814.3.4.2 Dynamic Declarations : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 824.3.4.3 Volatile Declarations : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 824.3.4.4 Discontiguous Declarations : : : : : : : : : : : : : : : : : : : : : : : : : : 824.3.4.5 Block Declarations : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 824.3.4.6 Meta-Predicate Declarations : : : : : : : : : : : : : : : : : : : : : : : : : 834.3.4.7 Module Declarations : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 844.3.4.8 Public Declarations : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 844.3.4.9 Mode Declarations : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 844.3.4.10 Include Declarations : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 844.3.4.11 Initializations : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 85

    4.3.5 Term and Goal Expansion : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 854.3.6 Conditional Compilation : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 86

    4.3.6.1 Conditional Compilation Examples : : : : : : : : : : : : : : : : : : 874.3.7 Predicate List : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 89

    4.4 Saving and Loading the Prolog Database : : : : : : : : : : : : : : : : : : : : : : 904.4.1 Overview of PO Files : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 904.4.2 Saved-States : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 914.4.3 Selective Saving and Loading of PO Files : : : : : : : : : : : : : : : : : 924.4.4 Predicate List : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 92

    4.5 Files and Directories : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 934.5.1 The File Search Path Mechanism : : : : : : : : : : : : : : : : : : : : : : : : : 93

    4.5.1.1 Defining File Search Paths : : : : : : : : : : : : : : : : : : : : : : : : : : : 944.5.1.2 Frequently Used File Specifications : : : : : : : : : : : : : : : : : : 964.5.1.3 Predefined File Search Paths : : : : : : : : : : : : : : : : : : : : : : : : 96

    4.5.2 Syntactic Rewriting : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 974.5.3 List of Predicates : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 99

    4.6 Input and Output : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 994.6.1 Introduction : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 1004.6.2 About Streams : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 100

    4.6.2.1 Programming Note : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 1004.6.2.2 Stream Categories : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 100

    4.6.3 Term Input : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 1014.6.3.1 Reading Terms: The "Read" Predicates : : : : : : : : : : : : 1014.6.3.2 Changing the Prompt : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 101

    4.6.4 Term Output : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 1024.6.4.1 Writing Terms: the "Write" Predicates : : : : : : : : : : : : : 1024.6.4.2 Common Characteristics : : : : : : : : : : : : : : : : : : : : : : : : : : : 1024.6.4.3 Distinctions Among the "write" Predicates : : : : : : : : : 1024.6.4.4 Displaying Terms : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 1034.6.4.5 Using the Portray Hook : : : : : : : : : : : : : : : : : : : : : : : : : : : : 1034.6.4.6 Portraying a Clause : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 104

    4.6.5 Byte and Character Input : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 1044.6.5.1 Overview : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 1044.6.5.2 Reading Bytes and Characters : : : : : : : : : : : : : : : : : : : : : : 104

  • iv SICStus Prolog

    4.6.5.3 Peeking : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 1044.6.5.4 Skipping : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 1054.6.5.5 Finding the End of Line and End of File : : : : : : : : : : : : 105

    4.6.6 Byte and Character Output : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 1054.6.6.1 Writing Bytes and Characters : : : : : : : : : : : : : : : : : : : : : : 1054.6.6.2 New Line : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 1054.6.6.3 Formatted Output : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 106

    4.6.7 Stream and File Handling : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 1064.6.7.1 Stream Objects : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 1064.6.7.2 Exceptions Related to Streams : : : : : : : : : : : : : : : : : : : : : 1074.6.7.3 Suppressing Error Messages : : : : : : : : : : : : : : : : : : : : : : : : 1074.6.7.4 Opening a Stream : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 1074.6.7.5 Text Stream Encodings : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 1084.6.7.6 Finding the Current Input Stream : : : : : : : : : : : : : : : : : : 1094.6.7.7 Finding the Current Output Stream : : : : : : : : : : : : : : : : 1104.6.7.8 Finding Out About Open Streams : : : : : : : : : : : : : : : : : : 1114.6.7.9 Closing a Stream : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 1114.6.7.10 Flushing Output : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 111

    4.6.8 Reading the State of Opened Streams : : : : : : : : : : : : : : : : : : : 1114.6.8.1 Stream Position Information for Terminal I/O : : : : : : 112

    4.6.9 Random Access to Files : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 1124.6.10 Summary of Predicates and Functions : : : : : : : : : : : : : : : : : : 112

    4.7 Arithmetic : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 1164.7.1 Overview : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 1164.7.2 Evaluating Arithmetic Expressions : : : : : : : : : : : : : : : : : : : : : : 1164.7.3 Exceptions Related to Arithmetic : : : : : : : : : : : : : : : : : : : : : : : 1164.7.4 Arithmetic Comparison : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 1174.7.5 Arithmetic Expressions : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 1174.7.6 Predicate Summary : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 121

    4.8 Looking at Terms : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 1214.8.1 Meta-logical Predicates : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 121

    4.8.1.1 Type Checking : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 1214.8.1.2 Unification : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 122

    4.8.2 Analyzing and Constructing Terms : : : : : : : : : : : : : : : : : : : : : : 1234.8.3 Analyzing and Constructing Lists : : : : : : : : : : : : : : : : : : : : : : : 1234.8.4 Converting between Constants and Text : : : : : : : : : : : : : : : : : 1234.8.5 Atom Operations : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 1244.8.6 Assigning Names to Variables : : : : : : : : : : : : : : : : : : : : : : : : : : : 1244.8.7 Copying Terms : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 1244.8.8 Comparing Terms : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 125

    4.8.8.1 Introduction : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 1254.8.8.2 Standard Order of Terms : : : : : : : : : : : : : : : : : : : : : : : : : : : 1264.8.8.3 Sorting Terms : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 127

    4.8.9 Mutable Terms : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 1274.8.10 Summary of Predicates : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 127

    4.9 Looking at the Program State : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 1304.9.1 Overview : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 1304.9.2 Associating Predicates with their Properties : : : : : : : : : : : : : 130

  • v4.9.3 Associating Predicates with Files : : : : : : : : : : : : : : : : : : : : : : : : 1314.9.4 Prolog Flags : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 1314.9.5 Load Context : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 1384.9.6 Predicate Summary : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 138

    4.10 Memory Use and Garbage Collection : : : : : : : : : : : : : : : : : : : : : : : : 1394.10.1 Overview : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 139

    4.10.1.1 Reclaiming Space : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 1414.10.1.2 Displaying Statistics : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 141

    4.10.2 Garbage Collection and Programming Style : : : : : : : : : : : : 1474.10.3 Enabling and Disabling the Garbage Collector : : : : : : : : : : 1494.10.4 Monitoring Garbage Collections : : : : : : : : : : : : : : : : : : : : : : : : 1494.10.5 Interaction of Garbage Collection and Heap Expansion : : 1494.10.6 Invoking the Garbage Collector Directly : : : : : : : : : : : : : : : : 1504.10.7 Atom Garbage Collection : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 151

    4.10.7.1 The Atom Garbage Collector User Interface : : : : : : : 1514.10.7.2 Protecting Atoms in Foreign Memory : : : : : : : : : : : : : : 1534.10.7.3 Permanent Atoms : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 1544.10.7.4 Details of Atom Registration : : : : : : : : : : : : : : : : : : : : : : 154

    4.10.8 Summary of Predicates : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 1554.11 Modules : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 155

    4.11.1 Overview : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 1554.11.2 Basic Concepts : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 1564.11.3 Defining a Module : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 1564.11.4 Converting Non-module-files into Module-files : : : : : : : : : : 1574.11.5 Loading a Module : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 1584.11.6 Visibility Rules : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 1594.11.7 The Source Module : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 1594.11.8 The Type-in Module : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 1604.11.9 Creating a Module Dynamically : : : : : : : : : : : : : : : : : : : : : : : : 1614.11.10 Module Prefixes on Clauses : : : : : : : : : : : : : : : : : : : : : : : : : : : 161

    4.11.10.1 Current Modules : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 1624.11.11 Debugging Code in a Module : : : : : : : : : : : : : : : : : : : : : : : : : 1624.11.12 Name Clashes : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 1634.11.13 Obtaining Information about Loaded Modules : : : : : : : : : 163

    4.11.13.1 Predicates Defined in a Module : : : : : : : : : : : : : : : : : : 1644.11.13.2 Predicates Visible in a Module : : : : : : : : : : : : : : : : : : : 164

    4.11.14 Importing Dynamic Predicates : : : : : : : : : : : : : : : : : : : : : : : : 1654.11.15 Module Name Expansion : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 1654.11.16 The meta_predicate Declaration : : : : : : : : : : : : : : : : : : : : : 1664.11.17 Semantics of Module Name Expansion : : : : : : : : : : : : : : : : 1684.11.18 Predicate Summary : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 170

    4.12 Modification of the Database : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 1704.12.1 Introduction : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 1704.12.2 Dynamic and Static Procedures : : : : : : : : : : : : : : : : : : : : : : : : 1714.12.3 Database References : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 1724.12.4 Adding Clauses to the Database : : : : : : : : : : : : : : : : : : : : : : : : 1734.12.5 Removing Clauses from the Database : : : : : : : : : : : : : : : : : : 173

    4.12.5.1 A Note on Efficient Use of retract/1 : : : : : : : : : : : : : 174

  • vi SICStus Prolog

    4.12.6 Accessing Clauses : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 1754.12.7 Modification of Running Code: Examples : : : : : : : : : : : : : : 175

    4.12.7.1 Example: assertz : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 1754.12.7.2 Example: retract : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 1764.12.7.3 Example: abolish : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 177

    4.12.8 The Internal Database : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 1774.12.9 Blackboard Primitives : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 1784.12.10 Summary of Predicates : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 179

    4.13 Sets and Bags: Collecting Solutions to a Goal : : : : : : : : : : : : : : : 1804.13.1 Introduction : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 1804.13.2 Collecting a Sorted List : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 181

    4.13.2.1 Existential Quantifier : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 1824.13.3 Collecting a Bag of Solutions : : : : : : : : : : : : : : : : : : : : : : : : : : : 182

    4.13.3.1 Collecting All Instances : : : : : : : : : : : : : : : : : : : : : : : : : : : 1824.13.4 Predicate Summary : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 183

    4.14 Grammar Rules : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 1834.14.1 Definite Clause Grammars : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 1834.14.2 How to Use the Grammar Rule Facility : : : : : : : : : : : : : : : : : 1844.14.3 An Example : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 1854.14.4 Semantics of Grammar Rules : : : : : : : : : : : : : : : : : : : : : : : : : : : 1864.14.5 Summary of Predicates : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 190

    4.15 Errors and Exceptions : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 1914.15.1 Overview : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 1914.15.2 Raising Exceptions : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 1914.15.3 Handling Exceptions : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 192

    4.15.3.1 Protecting a Particular Goal : : : : : : : : : : : : : : : : : : : : : : 1924.15.3.2 Handling Unknown Predicates : : : : : : : : : : : : : : : : : : : : : 193

    4.15.4 Error Classes : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 1934.15.4.1 Instantiation Errors : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 1964.15.4.2 Type Errors : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 1964.15.4.3 Domain Errors : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 1974.15.4.4 Evaluation Errors : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 1984.15.4.5 Representation Errors : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 1984.15.4.6 Existence Errors : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 1984.15.4.7 Permission Errors : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 1994.15.4.8 Context Errors : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 1994.15.4.9 Consistency Errors : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 2004.15.4.10 Syntax Errors : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 2004.15.4.11 Resource Errors : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 2014.15.4.12 System Errors : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 201

    4.15.5 An Example : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 2014.15.6 Interrupting Execution : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 2024.15.7 Summary of Predicates : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 203

    4.16 Messages and Queries : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 2034.16.1 Message Processing : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 203

    4.16.1.1 Phases of Message Processing : : : : : : : : : : : : : : : : : : : : : 2044.16.1.2 Message Generation Phase : : : : : : : : : : : : : : : : : : : : : : : : 2054.16.1.3 Message Printing Phase : : : : : : : : : : : : : : : : : : : : : : : : : : : 206

  • vii

    4.16.2 Message Handling Predicates : : : : : : : : : : : : : : : : : : : : : : : : : : : 2064.16.3 Query Processing : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 207

    4.16.3.1 Query Classes : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 2074.16.3.2 Phases of Query Processing : : : : : : : : : : : : : : : : : : : : : : : 2084.16.3.3 Hooks in Query Processing : : : : : : : : : : : : : : : : : : : : : : : : 2114.16.3.4 Default Input Methods : : : : : : : : : : : : : : : : : : : : : : : : : : : : 2114.16.3.5 Default Map Methods : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 2124.16.3.6 Default Query Classes : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 212

    4.16.4 Query Handling Predicates : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 2124.16.5 Predicate Summary : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 213

    4.17 Other Topics : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 2144.17.1 System Properties and Environment Variables : : : : : : : : : : 214

    4.17.1.1 System Properties Set by SICStus Prolog : : : : : : : : : : 2164.17.1.2 System Properties Affecting Initialization : : : : : : : : : : 216

    5 Debugging : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 2195.1 The Procedure Box Control Flow Model : : : : : : : : : : : : : : : : : : : : : : 2195.2 Basic Debugging Predicates : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 2215.3 Plain Spypoints : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 2235.4 Format of Debugging Messages : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 2245.5 Commands Available during Debugging : : : : : : : : : : : : : : : : : : : : : : 2255.6 Advanced Debugging an Introduction : : : : : : : : : : : : : : : : : : : : : 231

    5.6.1 Creating Breakpoints : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 2315.6.2 Processing Breakpoints : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 2325.6.3 Breakpoint Tests : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 2325.6.4 Specific and Generic Breakpoints : : : : : : : : : : : : : : : : : : : : : : : : 2395.6.5 Breakpoint Actions : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 2405.6.6 Advice-points : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 2455.6.7 Built-in Predicates for Breakpoint Handling : : : : : : : : : : : : : 2485.6.8 Accessing Past Debugger States : : : : : : : : : : : : : : : : : : : : : : : : : 2495.6.9 Storing User Information in the Backtrace : : : : : : : : : : : : : : : 2525.6.10 Hooks Related to Breakpoints : : : : : : : : : : : : : : : : : : : : : : : : : : 2545.6.11 Programming Breakpoints : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 256

    5.7 Breakpoint Handling Predicates : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 2605.8 The Processing of Breakpoints : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 2625.9 Breakpoint Conditions : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 264

    5.9.1 Tests Related to the Current Goal : : : : : : : : : : : : : : : : : : : : : : : 2655.9.2 Tests Related to Source Information : : : : : : : : : : : : : : : : : : : : : 2665.9.3 Tests Related to the Current Port : : : : : : : : : : : : : : : : : : : : : : : 2675.9.4 Tests Related to the Break Level : : : : : : : : : : : : : : : : : : : : : : : : 2685.9.5 Other Conditions : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 2685.9.6 Conditions Usable in the Action Part : : : : : : : : : : : : : : : : : : : : 2695.9.7 Options for Focusing on a Past State : : : : : : : : : : : : : : : : : : : : 2695.9.8 Condition Macros : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 2705.9.9 The Action Variables : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 270

    5.10 Consulting during Debugging : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 2725.11 Catching Exceptions : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 2725.12 Predicate Summary : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 273

  • viii SICStus Prolog

    6 Mixing C/C++ and Prolog : : : : : : : : : : : : : : : : : 2756.1 Notes : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 2756.2 Calling C from Prolog : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 276

    6.2.1 Foreign Resources : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 2776.2.2 Conversion Declarations : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 2786.2.3 Conversions between Prolog Arguments and C Types : : : : 2786.2.4 Interface Predicates : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 2816.2.5 The Foreign Resource Linker : : : : : : : : : : : : : : : : : : : : : : : : : : : : 281

    6.2.5.1 Customizing splfr. : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 2826.2.5.2 Creating Linked Foreign Resources Manually under

    UNIX : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 2826.2.5.3 Windows-specific splfr issues : : : : : : : : : : : : : : : : : : : : : : : : 282

    6.2.6 Init and Deinit Functions : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 2826.2.7 Creating the Linked Foreign Resource : : : : : : : : : : : : : : : : : : : 2836.2.8 Foreign Code Examples : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 284

    6.3 Calling C++ from Prolog : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 2866.4 Support Functions : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 286

    6.4.1 Creating and Manipulating SP term refs : : : : : : : : : : : : : : : : 2866.4.2 Atoms in C : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 2876.4.3 Creating Prolog Terms : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 2886.4.4 Accessing Prolog Terms : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 2896.4.5 Testing Prolog Terms : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 2896.4.6 Unifying and Comparing Terms : : : : : : : : : : : : : : : : : : : : : : : : : 2906.4.7 Operating System Services : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 290

    6.4.7.1 Memory Management : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 2906.4.7.2 File System : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 2916.4.7.3 Threads : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 291

    6.5 Calling Prolog from C : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 2916.5.1 Finding One Solution of a Call : : : : : : : : : : : : : : : : : : : : : : : : : : 2926.5.2 Finding Multiple Solutions of a Call : : : : : : : : : : : : : : : : : : : : : 2926.5.3 Calling Prolog Asynchronously : : : : : : : : : : : : : : : : : : : : : : : : : : 292

    6.5.3.1 Signal Handling : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 2936.5.4 Exception Handling in C : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 2936.5.5 Reading a goal from a string : : : : : : : : : : : : : : : : : : : : : : : : : : : : 294

    6.6 SICStus Streams : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 2946.6.1 Prolog Streams : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 2946.6.2 Defining a New Stream : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 296

    6.6.2.1 Low Level I/O Functions : : : : : : : : : : : : : : : : : : : : : : : : : : : 3006.6.3 Hookable Standard Streams : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 300

    6.6.3.1 Writing User-stream Hooks : : : : : : : : : : : : : : : : : : : : : : : : : 3016.6.3.2 Writing User-stream Post-hooks : : : : : : : : : : : : : : : : : : : : 301

    6.7 Stand-Alone Executables : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 3016.7.1 Runtime Systems : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 3026.7.2 Runtime Systems on Target Machines : : : : : : : : : : : : : : : : : : : 302

    6.7.2.1 Runtime Systems on UNIX Target Machines : : : : : : : : 3036.7.2.2 Runtime Systems on Windows Target Machines : : : : : 304

    6.7.3 The Application Builder : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 3066.7.3.1 Customizing spld : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 306

  • ix

    6.7.3.2 All-in-one Executables : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 3076.7.3.3 Setting up the C compiler on Windows : : : : : : : : : : : : : 3106.7.3.4 Extended Runtime Systems : : : : : : : : : : : : : : : : : : : : : : : : 3116.7.3.5 Examples : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 311

    6.7.4 User-defined Main Programs : : : : : : : : : : : : : : : : : : : : : : : : : : : : 3126.7.4.1 Initializing the Prolog Engine : : : : : : : : : : : : : : : : : : : : : : : 3136.7.4.2 Loading Prolog Code : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 313

    6.7.5 Generic Runtime Systems : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 3136.8 Mixing C and Prolog Examples : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 314

    6.8.1 Train Example (connections) : : : : : : : : : : : : : : : : : : : : : : : : : : : : 3146.8.2 Building for a Target Machine : : : : : : : : : : : : : : : : : : : : : : : : : : : 3176.8.3 Exceptions from C : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 3226.8.4 Stream Example : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 324

    6.9 Debugging Runtime Systems : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 3246.9.1 Locating the License Information : : : : : : : : : : : : : : : : : : : : : : : : 3256.9.2 Customizing the Debugged Runtime System : : : : : : : : : : : : : 3256.9.3 Examples of Debugging Runtime Systems : : : : : : : : : : : : : : : 326

    7 Interfacing .NET and Java : : : : : : : : : : : : : : : : : : 329

    8 Multiple SICStus Runtimes in a Process : : : 3318.1 Multiple SICStus Runtimes in Java : : : : : : : : : : : : : : : : : : : : : : : : : : : 3318.2 Multiple SICStus Runtimes in C : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 331

    8.2.1 Using a Single SICStus Runtime : : : : : : : : : : : : : : : : : : : : : : : : : 3318.2.2 Using More than One SICStus Runtime : : : : : : : : : : : : : : : : : 332

    8.3 Foreign Resources and Multiple SICStus Runtimes : : : : : : : : : : : 3338.3.1 Foreign Resources Supporting Only One SICStus Runtime

    : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 3338.3.2 Foreign Resources Supporting Multiple SICStus Runtimes

    : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 3348.3.2.1 Full Support for Multiple SICStus Runtimes : : : : : : : : 334

    8.4 Multiple Runtimes and Threads : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 336

    9 Writing Efficient Programs : : : : : : : : : : : : : : : : : : 3379.1 Overview : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 3379.2 Execution Profiling : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 3379.3 Coverage Analysis : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 3389.4 The Cut : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 339

    9.4.1 Overview : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 3399.4.2 Making Predicates Determinate : : : : : : : : : : : : : : : : : : : : : : : : : 3399.4.3 Placement of Cuts : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 3409.4.4 Terminating a Backtracking Loop : : : : : : : : : : : : : : : : : : : : : : : 341

    9.5 Indexing : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 3419.5.1 Overview : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 3429.5.2 Data Tables : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 3429.5.3 Determinacy Detection : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 343

    9.6 Last Clause Determinacy Detection : : : : : : : : : : : : : : : : : : : : : : : : : : 344

  • x SICStus Prolog

    9.7 The Determinacy Checker : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 3449.7.1 Using the Determinacy Checker : : : : : : : : : : : : : : : : : : : : : : : : : 3449.7.2 Declaring Nondeterminacy : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 3459.7.3 Checker Output : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 3459.7.4 Example : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 3469.7.5 Options : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 3479.7.6 What is Detected : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 348

    9.8 Last Call Optimization : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 3499.8.1 Accumulating Parameters : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 3499.8.2 Accumulating Lists : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 350

    9.9 Building and Dismantling Terms : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 3519.10 Conditionals and Disjunction : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 3549.11 Programming Examples : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 356

    9.11.1 Simple List Processing : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 3569.11.2 Family Example (descendants) : : : : : : : : : : : : : : : : : : : : : : : : : 3579.11.3 Association List Primitives : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 3579.11.4 Differentiation : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 3579.11.5 Use of Meta-Logical Predicates : : : : : : : : : : : : : : : : : : : : : : : : : 3589.11.6 Prolog in Prolog : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 3589.11.7 Translating English Sentences into Logic Formulae : : : : : : 359

    9.12 The Cross-Referencer : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 3609.12.1 Introduction : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 3609.12.2 Practice and Experience : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 360

    10 The Prolog Library : : : : : : : : : : : : : : : : : : : : : : : : : 36110.1 An Aggregation Operator for Data-Base-Style

    Querieslibrary(aggregate) : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 36410.2 Association Listslibrary(assoc) : : : : : : : : : : : : : : : : : : : : : : : : : 36710.3 Attributed Variableslibrary(atts) : : : : : : : : : : : : : : : : : : : : : : 36910.4 AVL Treeslibrary(avl) : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 37610.5 Bags, or Multisetslibrary(bags) : : : : : : : : : : : : : : : : : : : : : : : : : 37910.6 External Storage of Terms (Berkeley DB)library(bdb) : : : 382

    10.6.1 Basics : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 38310.6.2 Current Limitations : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 38310.6.3 Berkeley DB : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 38310.6.4 The DB-SpecInformal Description : : : : : : : : : : : : : : : : : : : : 38410.6.5 Predicates : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 384

    10.6.5.1 Conventions : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 38410.6.5.2 The Environment : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 38510.6.5.3 Memory Leaks : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 38510.6.5.4 The Predicates : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 385

    10.6.6 An Example Session : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 38910.6.7 The DB-Spec : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 38910.6.8 Exporting and importing a database : : : : : : : : : : : : : : : : : : : 390

    10.7 Generating Integerslibrary(between) : : : : : : : : : : : : : : : : : : : : 39010.8 I/O on Lists of Character Codeslibrary(codesio) : : : : : : : 39110.9 Accessing Files And Directorieslibrary(file_systems) : : 39210.10 Heap Operationslibrary(heaps) : : : : : : : : : : : : : : : : : : : : : : : : 397

  • xi

    10.11 List Operationslibrary(lists) : : : : : : : : : : : : : : : : : : : : : : : : : 39910.12 Array Operationslibrary(logarr) : : : : : : : : : : : : : : : : : : : : : : 41410.13 The Objects Packagelibrary(objects) : : : : : : : : : : : : : : : : : 415

    10.13.1 Introduction : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 41510.13.1.1 Using SICStus Objects : : : : : : : : : : : : : : : : : : : : : : : : : : : 41510.13.1.2 Defining Classes : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 41710.13.1.3 Using Classes : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 41810.13.1.4 Looking Ahead : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 419

    10.13.2 Simple Classes : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 41910.13.2.1 Scope of a Class Definition : : : : : : : : : : : : : : : : : : : : : : : 41910.13.2.2 Slots : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 42010.13.2.3 Methods : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 422

    10.13.3 Inheritance : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 43110.13.3.1 Single Inheritance : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 43110.13.3.2 Multiple Inheritance : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 43410.13.3.3 Asking About Classes and Objects : : : : : : : : : : : : : : : 437

    10.13.4 Term Classes : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 43910.13.4.1 Simple Term Classes : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 44010.13.4.2 Restricted Term Classes : : : : : : : : : : : : : : : : : : : : : : : : : : 44010.13.4.3 Specifying a Term Class Essence : : : : : : : : : : : : : : : : : 441

    10.13.5 Technical Details : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 44210.13.5.1 Syntax of Class Definitions : : : : : : : : : : : : : : : : : : : : : : : 44210.13.5.2 Limitations : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 444

    10.13.6 Exported Predicates : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 44510.13.6.1

  • xii SICStus Prolog

    10.13.6.25 uninherit/1\hfill declaration : : : : : : : : : : : : : : : : : : : 47410.13.7 Glossary : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 474

    10.14 The ODBC Interface Librarylibrary(odbc) : : : : : : : : : : : : : : 47710.14.1 Overview : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 47710.14.2 Examples : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 478

    10.14.2.1 Example 1 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 47810.14.2.2 Example 2 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 47910.14.2.3 Example 3 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 479

    10.14.3 Datatypes : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 47910.14.3.1 Reading from the database : : : : : : : : : : : : : : : : : : : : : : : 48010.14.3.2 Writing to the database : : : : : : : : : : : : : : : : : : : : : : : : : : 480

    10.14.4 Exceptions : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 48110.14.5 Predicates : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 482

    10.15 Ordered Set Operationslibrary(ordsets) : : : : : : : : : : : : : : : 48510.16 Process Utilitieslibrary(process) : : : : : : : : : : : : : : : : : : : : : : 48810.17 Queue Operations library(queues) : : : : : : : : : : : : : : : : : : : : : 49210.18 Random Number Generatorlibrary(random) : : : : : : : : : : : : 49410.19 Rems Algorithmlibrary(rem) : : : : : : : : : : : : : : : : : : : : : : : : : : 49610.20 Generic Sortinglibrary(samsort) : : : : : : : : : : : : : : : : : : : : : : : 49610.21 Unordered Set Operationslibrary(sets) : : : : : : : : : : : : : : : : 49710.22 Socket I/Olibrary(sockets) : : : : : : : : : : : : : : : : : : : : : : : : : : : 50010.23 The Structs Packagelibrary(structs) : : : : : : : : : : : : : : : : : : 503

    10.23.1 Foreign Types : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 50410.23.1.1 Declaring Types : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 506

    10.23.2 Checking Foreign Term Types : : : : : : : : : : : : : : : : : : : : : : : : : 50610.23.3 Creating and Destroying Foreign Terms : : : : : : : : : : : : : : : 50710.23.4 Accessing and Modifying Foreign Term Contents : : : : : : 50710.23.5 Casting : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 50810.23.6 Null Foreign Terms : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 50810.23.7 Interfacing with Foreign Code : : : : : : : : : : : : : : : : : : : : : : : : : 50810.23.8 Examining Type Definitions at Runtime : : : : : : : : : : : : : : : 50910.23.9 Tips : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 51010.23.10 Example : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 510

    10.24 Operating System Utilitieslibrary(system) : : : : : : : : : : : : : 51210.25 Term Utilitieslibrary(terms) : : : : : : : : : : : : : : : : : : : : : : : : : : : 51310.26 Meta-Call with Limit on Execution Timelibrary(timeout)

    : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 51810.27 Updatable Binary Treeslibrary(trees) : : : : : : : : : : : : : : : : : 51910.28 Type Checkinglibrary(types) : : : : : : : : : : : : : : : : : : : : : : : : : : 52010.29 Unweighted Graph Operationslibrary(ugraphs) : : : : : : : : 52210.30 An Inverse of numbervars/3library(varnumbers) : : : : : : : 52410.31 Weighted Graph Operationslibrary(wgraphs) : : : : : : : : : : 52510.32 Parsing and Generating XMLlibrary(xml) : : : : : : : : : : : : : 52810.33 Process Communicationlibrary(linda/[server,client])

    : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 52910.33.1 Linda Server : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 53110.33.2 Linda Client : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 532

    10.34 Constraint Handling Ruleslibrary(chr) : : : : : : : : : : : : : : : : 534

  • xiii

    10.34.1 Introduction : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 53410.34.2 Syntax and Semantics : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 535

    10.34.2.1 Syntax : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 53510.34.2.2 Semantics : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 536

    10.34.3 CHR in Prolog Programs : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 53710.34.3.1 Embedding in Prolog Programs : : : : : : : : : : : : : : : : : : 53710.34.3.2 Constraint Declaration : : : : : : : : : : : : : : : : : : : : : : : : : : : 53710.34.3.3 Compilation : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 539

    10.34.4 Debugging : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 53910.34.4.1 Ports : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 53910.34.4.2 Tracing : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 54010.34.4.3 Debugging Predicates : : : : : : : : : : : : : : : : : : : : : : : : : : : : 541

    10.34.5 Examples : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 54110.34.6 Guidelines : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 542

    10.35 Constraint Logic Programming over FiniteDomainslibrary(clpfd) : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 543

    10.35.1 Introduction : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 54310.35.1.1 Referencing this Software : : : : : : : : : : : : : : : : : : : : : : : : 54410.35.1.2 Acknowledgments : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 544

    10.35.2 Solver Interface : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 54410.35.2.1 Posting Constraints : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 54510.35.2.2 A Constraint Satisfaction Problem : : : : : : : : : : : : : : : 54510.35.2.3 Reified Constraints : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 547

    10.35.3 Available Constraints : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 54710.35.3.1 Arithmetic Constraints : : : : : : : : : : : : : : : : : : : : : : : : : : : 54710.35.3.2 Membership Constraints : : : : : : : : : : : : : : : : : : : : : : : : : 54910.35.3.3 Propositional Constraints : : : : : : : : : : : : : : : : : : : : : : : : 54910.35.3.4 Combinatorial Constraints : : : : : : : : : : : : : : : : : : : : : : : 55010.35.3.5 User-Defined Constraints : : : : : : : : : : : : : : : : : : : : : : : : : 578

    10.35.4 Enumeration Predicates : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 57910.35.5 Statistics Predicates : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 58210.35.6 Answer Constraints : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 58210.35.7 Debugging : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 58310.35.8 The Constraint System : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 583

    10.35.8.1 Definitions : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 58310.35.8.2 Pitfalls of Interval Reasoning : : : : : : : : : : : : : : : : : : : : : 584

    10.35.9 Defining Global Constraints : : : : : : : : : : : : : : : : : : : : : : : : : : : 58410.35.9.1 The Global Constraint Programming Interface : : : : 58410.35.9.2 Reflection Predicates : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 58610.35.9.3 FD Set Operations : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 58710.35.9.4 A Global Constraint Example : : : : : : : : : : : : : : : : : : : : 589

    10.35.10 Defining Primitive Constraints : : : : : : : : : : : : : : : : : : : : : : : 59110.35.10.1 Indexicals : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 59210.35.10.2 Range Expressions : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 59210.35.10.3 Term Expressions : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 59310.35.10.4 Monotonicity of Indexicals : : : : : : : : : : : : : : : : : : : : : : 59410.35.10.5 FD Predicates : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 59410.35.10.6 Execution of Propagating Indexicals : : : : : : : : : : : : : 596

  • xiv SICStus Prolog

    10.35.10.7 Execution of Checking Indexicals : : : : : : : : : : : : : : : : 59710.35.10.8 Goal Expanded Constraints : : : : : : : : : : : : : : : : : : : : : 598

    10.35.11 Coexisting with Attributes and Blocked Goals : : : : : : : : 59810.35.12 Example Programs : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 598

    10.35.12.1 Send More Money : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 59910.35.12.2 N Queens : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 59910.35.12.3 Cumulative Scheduling : : : : : : : : : : : : : : : : : : : : : : : : : : 600

    10.35.13 Syntax Summary : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 60110.35.13.1 Syntax of Indexicals : : : : : : : : : : : : : : : : : : : : : : : : : : : : 60110.35.13.2 Syntax of Arithmetic Expressions : : : : : : : : : : : : : : : 60310.35.13.3 Operator Declarations : : : : : : : : : : : : : : : : : : : : : : : : : : 604

    10.36 Constraint Logic Programming over Booleanslibrary(clpb): : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 604

    10.36.1 Introduction : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 60410.36.2 Solver Interface : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 60510.36.3 Examples : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 606

    10.36.3.1 Example 1 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 60610.36.3.2 Example 2 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 60610.36.3.3 Example 3 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 60710.36.3.4 Example 4 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 608

    10.37 Constraint Logic Programming over Rationals orRealslibrary([clpq,clpr]) : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 609

    10.37.1 Introduction : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 60910.37.1.1 Referencing this Software : : : : : : : : : : : : : : : : : : : : : : : : 61010.37.1.2 Acknowledgments : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 610

    10.37.2 Solver Interface : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 61010.37.2.1 Notational Conventions : : : : : : : : : : : : : : : : : : : : : : : : : : 61010.37.2.2 Solver Predicates : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 61110.37.2.3 Unification : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 61510.37.2.4 Feedback and Bindings : : : : : : : : : : : : : : : : : : : : : : : : : : : 616

    10.37.3 Linearity and Nonlinear Residues : : : : : : : : : : : : : : : : : : : : : 61610.37.3.1 How Nonlinear Residues Are Made to Disappear : : 61710.37.3.2 Isolation Axioms : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 618

    10.37.4 Numerical Precision and Rationals : : : : : : : : : : : : : : : : : : : : 61910.37.5 Projection and Redundancy Elimination : : : : : : : : : : : : : : 623

    10.37.5.1 Variable Ordering : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 62410.37.5.2 Turning Answers into Terms : : : : : : : : : : : : : : : : : : : : : 62510.37.5.3 Projecting Inequalities : : : : : : : : : : : : : : : : : : : : : : : : : : : 625

    10.37.6 Why Disequations : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 62810.37.7 Monash Examples : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 63010.37.8 A Mixed Integer Linear Optimization Example : : : : : : : : 63110.37.9 Implementation Architecture : : : : : : : : : : : : : : : : : : : : : : : : : : 633

    10.37.9.1 Fragments and Bits : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 63310.37.9.2 Bugs : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 633

    10.38 Finite Domain Constraint Debuggerlibrary(fdbg) : : : : : : 63410.38.1 Introduction : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 63410.38.2 Concepts : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 634

    10.38.2.1 Events : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 634

  • xv

    10.38.2.2 Labeling Levels : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 63510.38.2.3 Visualizers : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 63510.38.2.4 Names of Terms : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 63610.38.2.5 Selectors : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 63610.38.2.6 Name Auto-Generation : : : : : : : : : : : : : : : : : : : : : : : : : : 63610.38.2.7 Legend : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 63710.38.2.8 The fdbg_output Stream : : : : : : : : : : : : : : : : : : : : : : : : 637

    10.38.3 Basics : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 63710.38.3.1 FDBG Options : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 63710.38.3.2 Naming Terms : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 63910.38.3.3 Built-In Visualizers : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 63910.38.3.4 New Debugger Commands : : : : : : : : : : : : : : : : : : : : : : : 64010.38.3.5 Annotating Programs : : : : : : : : : : : : : : : : : : : : : : : : : : : : 64110.38.3.6 An Example Session : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 642

    10.38.4 Advanced Usage : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 64410.38.4.1 Customizing Output : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 64410.38.4.2 Writing Visualizers : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 64510.38.4.3 Writing Legend Printers : : : : : : : : : : : : : : : : : : : : : : : : : : 64710.38.4.4 Showing Selected Constraints (simple version) : : : : 64710.38.4.5 Showing Selected Constraints (advanced version)

    : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 64810.38.4.6 Debugging Global Constraints : : : : : : : : : : : : : : : : : : : : 65210.38.4.7 Code of the Built-In Visualizers : : : : : : : : : : : : : : : : : : 657

    10.39 Zinc Interfacelibrary(zinc) : : : : : : : : : : : : : : : : : : : : : : : : : : : : 65810.39.1 Notes : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 65810.39.2 FlatZinc : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 659

    10.39.2.1 Exported Predicates : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 66010.39.3 MiniZinc : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 667

    10.39.3.1 Prerequisites : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 66710.39.3.2 Exported Predicates : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 668

    10.39.4 Zinc Errors : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 67310.40 The PiLLoW Web Programming Librarylibrary(pillow)

    : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 67510.41 Tcl/Tk Interfacelibrary(tcltk) : : : : : : : : : : : : : : : : : : : : : : : : 675

    10.41.1 Introduction : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 67510.41.1.1 What Is Tcl/Tk? : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 67510.41.1.2 What Is Tcl/Tk Good For? : : : : : : : : : : : : : : : : : : : : : : 67510.41.1.3 What Is Tcl/Tks Relationship to SICStus Prolog?

    : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 67610.41.1.4 A Quick Example of Tcl/Tk in Action : : : : : : : : : : : : 67610.41.1.5 Outline of This Tutorial : : : : : : : : : : : : : : : : : : : : : : : : : : 679

    10.41.2 Tcl : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 67910.41.2.1 Syntax : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 68010.41.2.2 Variables : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 68210.41.2.3 Commands : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 68310.41.2.4 What We Have Left Out : : : : : : : : : : : : : : : : : : : : : : : : : 698

    10.41.3 Tk : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 69910.41.3.1 Widgets : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 699

  • xvi SICStus Prolog

    10.41.3.2 Types of Widget : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 69910.41.3.3 Widgets Hierarchies : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 70110.41.3.4 Widget Creation : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 70310.41.3.5 Geometry Managers : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 71110.41.3.6 Event Handling : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 72410.41.3.7 Miscellaneous : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 72710.41.3.8 What We Have Left Out : : : : : : : : : : : : : : : : : : : : : : : : : 72810.41.3.9 Example pure Tcl/Tk program : : : : : : : : : : : : : : : : : : : 728

    10.41.4 The Tcl/Tk Prolog Library : : : : : : : : : : : : : : : : : : : : : : : : : : : 73210.41.4.1 How it Works - An Overview : : : : : : : : : : : : : : : : : : : : : 73310.41.4.2 Basic Functions : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 73410.41.4.3 Evaluation Functions : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 73510.41.4.4 Event Functions : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 74010.41.4.5 Servicing Tcl and Tk events : : : : : : : : : : : : : : : : : : : : : : 74310.41.4.6 Passing Control to Tk : : : : : : : : : : : : : : : : : : : : : : : : : : : : 74510.41.4.7 Housekeeping functions : : : : : : : : : : : : : : : : : : : : : : : : : : 74510.41.4.8 Summary : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 746

    10.41.5 Putting It All Together : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 74810.41.5.1 Tcl The Master, Prolog The Slave : : : : : : : : : : : : : : : : 74910.41.5.2 Prolog The Master, Tk The Slave : : : : : : : : : : : : : : : : 75310.41.5.3 Prolog And Tcl Interact through Prolog Event Queue

    : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 75610.41.5.4 The Whole 8-Queens Example : : : : : : : : : : : : : : : : : : : 758

    10.41.6 Quick Reference : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 76410.41.6.1 Command Format Summary : : : : : : : : : : : : : : : : : : : : : 76410.41.6.2 Predicates for Prolog to Interact with Tcl Interpreters

    : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 76610.41.6.3 Predicates for Prolog to Interact with Tcl Interpreters

    with Tk Extensions : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 76610.41.6.4 Commands for Tcl Interpreters to Interact with The

    Prolog System : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 76710.41.7 Resources : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 768

    10.41.7.1 Web Sites : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 76810.41.7.2 Books : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 76810.41.7.3 Manual Pages : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 76810.41.7.4 Usenet News Groups : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 768

    10.42 The Gauge Profiling Toollibrary(gauge) : : : : : : : : : : : : : : : 76810.43 Jasper Interfacelibrary(jasper) : : : : : : : : : : : : : : : : : : : : : : : : 770

    10.43.1 Jasper Overview : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 77010.43.2 Getting Started : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 77110.43.3 Calling Prolog from Java : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 771

    10.43.3.1 Single Threaded Example : : : : : : : : : : : : : : : : : : : : : : : : 77210.43.3.2 Multi Threaded Example : : : : : : : : : : : : : : : : : : : : : : : : : 77310.43.3.3 Another Multi Threaded Example (Prolog Top-Level)

    : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 77510.43.4 Jasper Package Class Reference : : : : : : : : : : : : : : : : : : : : : : : 77910.43.5 Java Exception Handling : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 78210.43.6 SPTerm and Memory : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 782

  • xvii

    10.43.6.1 Lifetime of SPTerms and Prolog Memory : : : : : : : : : 78210.43.6.2 Preventing SPTerm Memory Leaks : : : : : : : : : : : : : : : 783

    10.43.7 Java Threads : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 78410.43.8 The Jasper Library : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 785

    10.43.8.1 Jasper Method Call Example : : : : : : : : : : : : : : : : : : : : : 78510.43.8.2 Jasper Library Predicates : : : : : : : : : : : : : : : : : : : : : : : : 78810.43.8.3 Conversion between Prolog Arguments and Java

    Types : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 79110.43.8.4 Global vs. Local References : : : : : : : : : : : : : : : : : : : : : : 79510.43.8.5 Handling Java Exceptions : : : : : : : : : : : : : : : : : : : : : : : : 79610.43.8.6 Deprecated Jasper API : : : : : : : : : : : : : : : : : : : : : : : : : : : 79810.43.8.7 Deprecated Argument Conversions : : : : : : : : : : : : : : : 79810.43.8.8 Deprecated Jasper Predicates : : : : : : : : : : : : : : : : : : : : 798

    10.44 PrologBeans Interfacelibrary(prologbeans) : : : : : : : : : : : : 79910.44.1 Introduction : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 79910.44.2 Features : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 80110.44.3 A First Example : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 80110.44.4 Prolog Server Interface : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 80410.44.5 Java Client Interface : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 80710.44.6 Java Examples : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 807

    10.44.6.1 Embedding Prolog in Java Applications : : : : : : : : : : 80710.44.6.2 Application Servers : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 80810.44.6.3 Configuring Tomcat for PrologBeans : : : : : : : : : : : : : 810

    10.44.7 .NET Client Interface : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 81110.44.8 .NET Examples : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 812

    10.44.8.1 C# Examples : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 81210.44.8.2 Visual Basic Example : : : : : : : : : : : : : : : : : : : : : : : : : : : : 813

    10.45 COM Clientlibrary(comclient) : : : : : : : : : : : : : : : : : : : : : : : : 81310.45.1 Preliminaries : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 81310.45.2 Terminology : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 81310.45.3 Predicate Reference : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 81510.45.4 Examples : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 817

    10.46 Plunit Interfacelibrary(plunit) : : : : : : : : : : : : : : : : : : : : : : : : 81910.46.1 Introduction : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 81910.46.2 A Unit Test Box : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 81910.46.3 Writing the Test-Body : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 822

    10.46.3.1 Determinate Tests : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 82210.46.3.2 Nondeterminate Tests : : : : : : : : : : : : : : : : : : : : : : : : : : : : 82310.46.3.3 Tests Expected to Fail : : : : : : : : : : : : : : : : : : : : : : : : : : : 82310.46.3.4 Tests Expected to Raise Exceptions : : : : : : : : : : : : : : 823

    10.46.4 Running the Test-Suite : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 82410.46.5 Tests and Production Systems : : : : : : : : : : : : : : : : : : : : : : : : 825

  • xviii SICStus Prolog

    11 Prolog Reference Pages : : : : : : : : : : : : : : : : : : : : 82711.1 Reading the Reference Pages : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 827

    11.1.1 Overview : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 82711.1.2 Mode Annotations : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 82711.1.3 Predicate Annotation : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 82811.1.4 Argument Types : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 829

    11.1.4.1 Simple Types : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 83011.1.4.2 Extended Types : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 830

    11.1.5 Exceptions : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 83011.1.6 Other Fields : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 831

    11.2 Topical List of Prolog Built-Ins : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 83111.2.1 All Solutions : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 83111.2.2 Arithmetic : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 83111.2.3 Character I/O : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 83211.2.4 Control : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 83311.2.5 Database : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 83411.2.6 Debugging : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 83611.2.7 Errors and Exceptions : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 83711.2.8 Filename Manipulation : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 83811.2.9 File and Stream Handling : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 83811.2.10 Foreign Interface : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 83911.2.11 Grammar Rules : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 84011.2.12 Hook Predicates : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 84011.2.13 List Processing : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 84111.2.14 Loading Programs : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 84211.2.15 Memory : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 84311.2.16 Messages and Queries : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 84411.2.17 Modules : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 84511.2.18 Program State : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 84511.2.19 Saving Programs : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 84611.2.20 Term Comparison : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 84711.2.21 Term Handling : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 84711.2.22 Term I/O : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 84811.2.23 Type Tests : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 849

    11.3 Built-In Predicates : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 85011.3.1 abolish/[1,2] \hfill [ISO] : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 85111.3.2 abort/0 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 85311.3.3 absolute_file_name/[2,3] \hfill [hookable] : : : : : : : : : : : 85411.3.4 add_breakpoint/2 \hfill [development] : : : : : : : : : : : : : : : : 86111.3.5 ,/2 \hfill [ISO] : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 86211.3.6 append/3 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 86311.3.7 arg/3 \hfill [ISO] : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 86611.3.8 ask_query/4 \hfill [hookable] : : : : : : : : : : : : : : : : : : : : : : : : : : 86711.3.9 assert/[1,2] : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 86911.3.10 asserta/[1,2] \hfill [ISO] : : : : : : : : : : : : : : : : : : : : : : : : : : : 87111.3.11 assertz/[1,2] \hfill [ISO] : : : : : : : : : : : : : : : : : : : : : : : : : : : 87311.3.12 at_end_of_line/[0,1] : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 87511.3.13 at_end_of_stream/[0,1] \hfill [ISO] : : : : : : : : : : : : : : : : : 876

  • xix

    11.3.14 atom/1 \hfill [ISO] : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 87711.3.15 atom_chars/2 \hfill [ISO] : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 87811.3.16 atom_codes/2 \hfill [ISO] : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 87911.3.17 atom_concat/3 \hfill [ISO] : : : : : : : : : : : : : : : : : : : : : : : : : : : 88011.3.18 atom_length/2 \hfill [ISO] : : : : : : : : : : : : : : : : : : : : : : : : : : : 88111.3.19 atomic/1 \hfill [ISO] : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 88211.3.20 bagof/3 \hfill [ISO] : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 88311.3.21 bb_delete/2 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 88411.3.22 bb_get/2 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 88511.3.23 bb_put/2 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 88611.3.24 bb_update/3 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 88711.3.25 block/1 \hfill [declaration] : : : : : : : : : : : : : : : : : : : : : : : : : : : 88811.3.26 break/0 \hfill [development] : : : : : : : : : : : : : : : : : : : : : : : : : : 89011.3.27 breakpoint_expansion/2 \hfill [development,hook] : : : 89111.3.28 byte_count/2 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 89211.3.29 call/[1,2,...,255] \hfill [ISO] : : : : : : : : : : : : : : : : : : : : : : 89311.3.30 call_cleanup/2 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 89411.3.31 call_residue_vars/2 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 89511.3.32 callable/1 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 89611.3.33 catch/3 \hfill [ISO] : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 89711.3.34 char_code/2 \hfill [ISO] : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 89811.3.35 char_conversion/2 \hfill [ISO] : : : : : : : : : : : : : : : : : : : : : : : 89911.3.36 character_count/2 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 90011.3.37 clause/[2,3] \hfill [ISO] : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 90111.3.38 close/[1,2] \hfill [ISO] : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 90311.3.39 compare/3 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 90511.3.40 compile/1 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 90611.3.41 compound/1 \hfill [ISO] : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 90711.3.42 consult/1 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 90811.3.43 copy_term/[2,3] \hfill [ISO] : : : : : : : : : : : : : : : : : : : : : : : : : 90911.3.44 coverage_data/1 \hfill [development] : : : : : : : : : : : : : : : : : 91111.3.45 create_mutable/2 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 91211.3.46 current_atom/1 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 91311.3.47 current_breakpoint/5 \hfill [development] : : : : : : : : : : : 91411.3.48 current_char_conversion/2 \hfill [ISO] : : : : : : : : : : : : : 91511.3.49 current_input/1 \hfill [ISO] : : : : : : : : : : : : : : : : : : : : : : : : : 91611.3.50 current_key/2 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 91711.3.51 current_module/[1,2] : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 91811.3.52 current_op/3 \hfill [ISO] : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 92011.3.53 current_output/1 \hfill [ISO] : : : : : : : : : : : : : : : : : : : : : : : : 92111.3.54 current_predicate/[1,2] \hfill [ISO] : : : : : : : : : : : : : : : : 92211.3.55 current_prolog_flag/2 \hfill [ISO] : : : : : : : : : : : : : : : : : : 92411.3.56 current_stream/3 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 92511.3.57 !/0 \hfill [ISO] : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 92611.3.58 db_reference/1 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 92711.3.59 debug/0 \hfill [development] : : : : : : : : : : : : : : : : : : : : : : : : : : 92811.3.60 debugger_command_hook/2 \hfill [development,hook] : : 92911.3.61 debugging/0 \hfill [development] : : : : : : : : : : : : : : : : : : : : : 930

  • xx SICStus Prolog

    11.3.62 dif/2 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 93111.3.63 disable_breakpoints/1 \hfill [development] : : : : : : : : : 93211.3.64 discontiguous/1 \hfill [ISO,declaration] : : : : : : : : : : : : : : 93311.3.65 display/1 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 93411.3.66 do/2 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 93511.3.67 dynamic/1 \hfill [ISO,declaration] : : : : : : : : : : : : : : : : : : : : : 93711.3.68 enable_breakpoints/1 \hfill [development] : : : : : : : : : : : 93811.3.69 ensure_loaded/1 \hfill [ISO] : : : : : : : : : : : : : : : : : : : : : : : : : 93911.3.70 =:=/2 \hfill [ISO] : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 94011.3.71 erase/1 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 94111.3.72 error_exception/1 \hfill [development,hook] : : : : : : : : : 94211.3.73 execution_state/[1,2] \hfill [development] : : : : : : : : : 94311.3.74 ^/2 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 94411.3.75 expand_term/2 \hfill [hookable] : : : : : : : : : : : : : : : : : : : : : : : 94511.3.76 fail/0 \hfill [ISO] : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 94611.3.77 false/0 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 94711.3.78 file_search_path/2 \hfill [hook] : : : : : : : : : : : : : : : : : : : : : 94811.3.79 findall/[3,4] \hfill [ISO] : : : : : : : : : : : : : : : : : : : : : : : : : : : 95011.3.80 float/1 \hfill [ISO] : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 95311.3.81 flush_output/[0,1] \hfill [ISO] : : : : : : : : : : : : : : : : : : : : : : 95411.3.82 foreign/[2,3] \hfill [hook] : : : : : : : : : : : : : : : : : : : : : : : : : : 95511.3.83 foreign_resource/2 \hfill [hook] : : : : : : : : : : : : : : : : : : : : : 95611.3.84 format/[2,3] : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 95711.3.85 freeze/2 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 96311.3.86 frozen/2 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 96411.3.87 functor/3 \hfill [ISO] : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 96511.3.88 garbage_collect/0 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 96711.3.89 garbage_collect_atoms/0 : : : : : : : : : : : : : : : : : : : : : : : : : : : 96811.3.90 generate_message/3 \hfill [extendible] : : : : : : : : : : : : : : : 96911.3.91 generate_message_hook/3 \hfill [hook] : : : : : : : : : : : : : : : 97111.3.92 get_byte/[1,2] \hfill [ISO] : : : : : : : : : : : : : : : : : : : : : : : : : : 97311.3.93 get_char/[1,2] \hfill [ISO] : : : : : : : : : : : : : : : : : : : : : : : : : : 97411.3.94 get_code/[1,2] \hfill [ISO] : : : : : : : : : : : : : : : : : : : : : : : : : : 97511.3.95 get_mutable/2 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 97611.3.96 goal_expansion/5 \hfill [hook] : : : : : : : : : : : : : : : : : : : : : : : 97711.3.97 goal_source_info/3 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 97911.3.98 >/2 \hfill [ISO] : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 98011.3.99 ground/1 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 98111.3.100 halt/[0,1] \hfill [ISO] : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 98211.3.101 if/3 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 98311.3.102 ->/2 \hfill [ISO] : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 98411.3.103 include/1 \hfill [ISO,declaration] : : : : : : : : : : : : : : : : : : : : 98511.3.104 initialization/1 \hfill [ISO,declaration] : : : : : : : : : : : 98611.3.105 instance/2 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 98711.3.106 integer/1 \hfill [ISO] : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 98811.3.107 is/2 \hfill [ISO] : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 98911.3.108 keysort/2 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 99111.3.109 leash/1 \hfill [development] : : : : : : : :