On Applying Program Transformation to Implement Suspension-Based Tabling in Prolog

Ricardo Rocha, Cláudio Silva and Ricardo Lopes

September 2007


A common approach used to include tabling support into existing Prolog systems is to modify and extend the low-level engine. A different approach is to apply source level transformations to a tabled program and then use external tabling primitives that provide direct control over the search strategy to implement tabled evaluation. In this work, we present a suspension-based tabling mechanism based on program transformation and we use the C language interface, available in most Prolog systems, to implement the tabling primitives. In particular, we use the C interface of the Yap Prolog system to build external Prolog modules implementing the support for tabled evaluation. To evaluate the impact of our approach, we ran it against the state-of-the-art YapTab system, that implements tabling support at the low-level engine. Initial results are very interesting and very promising. We thus argue that our approach is a good alternative to incorporate tabling into any Prolog system. It requires neither advanced knowledge of the implementation details of tabling nor time consuming or complex modifications to the low-level engine. Moreover, both source level transformations and tabling primitives can be easily ported to other Prolog systems with a C language interface.


  author =    {R. Rocha and C. Silva and R. Lopes},
  title =     {{On Applying Program Transformation to Implement Suspension-Based Tabling in Prolog}},
  booktitle = {Proceedings of the 23rd International Conference on Logic Programming (ICLP 2007)},
  pages =     {444--445},
  number =    {4670},
  series =    {LNCS},
  publisher = {Springer},
  editor =    {V. Dahl and I. Niemelä},
  month =     {September},
  year =      {2007},
  address =   {Porto, Portugal},

Download Paper

PDF file

Download Slides

PDF file

Download Poster

PDF file