\contentsline {subsection}{\numberline {0.1}Introduction}{2} \contentsline {subsection}{\numberline {0.2}Notational Conventions}{2} \contentsline {section}{\numberline {1}How to run Prolog}{3} \contentsline {subsection}{\numberline {1.1}Getting Started}{3} \contentsline {subsection}{\numberline {1.2}Reading in Programs}{3} \contentsline {subsection}{\numberline {1.3}Inserting Clauses at the Terminal}{4} \contentsline {subsection}{\numberline {1.4}Directives: Queries and Commands}{4} \contentsline {subsection}{\numberline {1.5}Syntax Errors}{6} \contentsline {subsection}{\numberline {1.6}Undefined Predicates}{6} \contentsline {subsection}{\numberline {1.7}Program Execution And Interruption}{6} \contentsline {subsection}{\numberline {1.8}Exiting From The Interpreter}{7} \contentsline {subsection}{\numberline {1.9}Nested Executions---Break and Abort}{7} \contentsline {subsection}{\numberline {1.10}Saving and Restoring Program States}{7} \contentsline {subsection}{\numberline {1.11}Emacs Interface}{8} \contentsline {section}{\numberline {2}Debugging}{9} \contentsline {subsection}{\numberline {2.1}The Procedure Box Control Flow Model}{9} \contentsline {subsection}{\numberline {2.2}Basic Debugging Predicates}{10} \contentsline {subsection}{\numberline {2.3}Tracing}{11} \contentsline {subsection}{\numberline {2.4}Spy-points}{11} \contentsline {subsection}{\numberline {2.5}Format of Debugging messages}{12} \contentsline {subsection}{\numberline {2.6}Options available during Debugging}{12} \contentsline {subsection}{\numberline {2.7}Consulting during Debugging}{14} \contentsline {subsection}{\numberline {2.8}Advanced Debugging Predicates}{14} \contentsline {section}{\numberline {3}Loading Programs}{14} \contentsline {subsection}{\numberline {3.1}Predicates which Load Code}{14} \contentsline {subsection}{\numberline {3.2}Declarations}{15} \contentsline {subsection}{\numberline {3.3}Pitfalls of File-To-File Compilation}{15} \contentsline {subsection}{\numberline {3.4}Indexing}{15} \contentsline {subsection}{\numberline {3.5}Tail Recursion Optimization}{15} \contentsline {section}{\numberline {4}Built-In Predicates}{15} \contentsline {subsection}{\numberline {4.1}Input / Output}{16} \contentsline {subsubsection}{\numberline {4.1.1}Reading-in Programs}{16} \contentsline {subsubsection}{\numberline {4.1.2}Input and Output of Terms}{16} \contentsline {subsubsection}{\numberline {4.1.3}Character Input/Output}{18} \contentsline {subsubsection}{\numberline {4.1.4}Stream IO}{18} \contentsline {subsubsection}{\numberline {4.1.5}Socket IO}{19} \contentsline {subsubsection}{\numberline {4.1.6}DEC-10 Prolog File IO}{19} \contentsline {subsection}{\numberline {4.2}Arithmetic}{19} \contentsline {subsection}{\numberline {4.3}Comparison of Terms}{22} \contentsline {subsection}{\numberline {4.4}Control}{23} \contentsline {subsection}{\numberline {4.5}Error and Exception Handling}{24} \contentsline {subsection}{\numberline {4.6}Information about the State of the Program}{25} \contentsline {subsection}{\numberline {4.7}Meta-Logic}{25} \contentsline {subsection}{\numberline {4.8}Modification of the Program}{27} \contentsline {subsection}{\numberline {4.9}Internal Database}{28} \contentsline {subsection}{\numberline {4.10}All Solutions}{29} \contentsline {subsection}{\numberline {4.11}Debugging}{30} \contentsline {subsection}{\numberline {4.12}Execution Profiling}{30} \contentsline {subsection}{\numberline {4.13}Definite Clause Grammars}{30} \contentsline {subsection}{\numberline {4.14}Miscellaneous}{31} \contentsline {section}{\numberline {5}The Module System}{31} \contentsline {section}{\numberline {6}Coroutining Facilities}{31} \contentsline {section}{\numberline {7}Mixing C and Prolog}{31} \contentsline {section}{\numberline {8}The Prolog Language}{31} \contentsline {subsection}{\numberline {8.1}Syntax, Terminology and Informal Semantics}{32} \contentsline {subsubsection}{\numberline {8.1.1}Terms}{32} \contentsline {subsubsection}{\numberline {8.1.2}Programs}{34} \contentsline {subsection}{\numberline {8.2}Declarative Semantics}{36} \contentsline {subsection}{\numberline {8.3}Procedural Semantics}{36} \contentsline {subsection}{\numberline {8.4}Occur Check}{37} \contentsline {subsection}{\numberline {8.5}The Cut Symbol}{38} \contentsline {subsection}{\numberline {8.6}Operators}{38} \contentsline {subsection}{\numberline {8.7}Syntax Restrictions}{40} \contentsline {subsection}{\numberline {8.8}Comments}{41} \contentsline {subsection}{\numberline {8.9}Full Prolog Syntax}{41} \contentsline {section}{\numberline {9}Programming Examples}{41} \contentsline {section}{\numberline {10}Summary of Built-In Predicates}{41} \contentsline {section}{\numberline {11}Standard Operators}{51}