SPOOL

is a Prolog based object oriented language. See  [FH86]. It extends Prolog with classes, instance variables, and message passing to enable the communication between instances of clauses. The clauses defined for a class act as methods. In a method call of the form send(Receiver,Message) both the Receiver and the Message may be variables, thus allowing backtracking both with respect to the destination of the message and the method that will be applied. This rather unwieldy backtracking behavior is made possible by embedding methods in Prolog clauses representing a class of objects. See  [Yo86] for the details of the compilation of SPOOL to Prolog. The advantage of this approach is that it combines the expressiveness of a logic programming language with the organizational capabilities of object oriented programming. To our mind, the backtracking that may arise from anonymous method calls, where the destination is a variable, seems somewhat extravagant. In  [FH86] an application of SPOOL for producing program annotations is described.