<?xml version="1.0" encoding="UTF-8"?>
<OAI-PMH xmlns="http://www.openarchives.org/OAI/2.0/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.openarchives.org/OAI/2.0/ http://www.openarchives.org/OAI/2.0/OAI-PMH.xsd">
  <responseDate>2026-07-22T11:39:44Z</responseDate>
  <request identifier="8453" metadataPrefix="oai_dc" verb="GetRecord">https://drops.dagstuhl.de/oai</request>
  <GetRecord>
    <record>
      <header>
        <identifier>oai:drops-oai.dagstuhl.de:8453</identifier>
        <datestamp>2024-03-06T10:30:10Z</datestamp>
        <setSpec>ddc:004</setSpec>
        <setSpec>open_access</setSpec>
      </header>
      <metadata>
        <oai_dc:dc xmlns:oai_dc="http://www.openarchives.org/OAI/2.0/oai_dc/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.openarchives.org/OAI/2.0/oai_dc/ http://www.openarchives.org/OAI/2.0/oai_dc.xsd">
          <dc:title>A Hitchhiker's Guide to Reinventing a Prolog Machine</dc:title>
          <dc:creator>Tarau, Paul</dc:creator>
          <dc:subject>Prolog abstract machines</dc:subject>
          <dc:subject>heap representation of terms and code</dc:subject>
          <dc:subject>immutable goal stacks</dc:subject>
          <dc:subject>natural language syntax for clauses</dc:subject>
          <dc:subject>answer streams</dc:subject>
          <dc:subject>multi-arg</dc:subject>
          <dc:description>We take a fresh, "clean-room" look at implementing Prolog by deriving its translation to an executable representation&#13;
and its  execution algorithm from a simple Horn Clause meta-interpreter. &#13;
&#13;
The resulting design has some interesting properties.&#13;
The heap representation of terms and the abstract machine instruction encodings are the same.&#13;
No dedicated code area is used as the code is placed  directly on the heap.&#13;
Unification and indexing operations are orthogonal.&#13;
Filtering of matching clauses happens without building new structures on the heap.&#13;
Variables in function and predicate symbol positions are handled with no performance penalty.&#13;
A simple English-like syntax is used as an intermediate representation for clauses and goals and &#13;
the same simple syntax can be used by programmers directly as an alternative to classic Prolog syntax.&#13;
Solutions of (multiple) logic engines are exposed as answer streams &#13;
 that can be combined through typical functional programming patterns,&#13;
with flexibility to stop, resume, encapsulate and interleave executions.&#13;
Performance of a basic interpreter implementing our design is within a factor of 2 of a highly optimized compiled&#13;
WAM-based system using the same host language.&#13;
&#13;
To help placing our design on the fairly rich map of Prolog systems, we discuss similarities &#13;
to existing Prolog abstract machines, with emphasis on  separating  necessary&#13;
commonalities  from arbitrary implementation choices.</dc:description>
          <dc:publisher>Schloss Dagstuhl – Leibniz-Zentrum für Informatik</dc:publisher>
          <dc:contributor>Paul Tarau</dc:contributor>
          <dc:date>2018</dc:date>
          <dc:relation>Is Part Of OASIcs, Volume 58, Technical Communications of the 33rd International Conference on Logic Programming (ICLP 2017)</dc:relation>
          <dc:type>InProceedings</dc:type>
          <dc:type>Text</dc:type>
          <dc:type>doc-type:ResearchArticle</dc:type>
          <dc:type>publishedVersion</dc:type>
          <dc:format>application/pdf</dc:format>
          <dc:identifier>doi:10.4230/OASIcs.ICLP.2017.10</dc:identifier>
          <dc:identifier>urn:nbn:de:0030-drops-84537</dc:identifier>
          <dc:identifier>https://drops.dagstuhl.de/entities/document/10.4230/OASIcs.ICLP.2017.10</dc:identifier>
          <dc:language>eng</dc:language>
          <dc:rights>https://creativecommons.org/licenses/by/3.0/legalcode</dc:rights>
        </oai_dc:dc>
      </metadata>
    </record>
  </GetRecord>
</OAI-PMH>
