The core of this work is the development of a translator from Prolog to C#, which enables code written in Prolog to make use of C#’s library and to interact with other aspects of Microsoft’s .NET platform.
The language developed, called P#, has standard Prolog as a subset, but the author has introduced a mechanism to enable threads executing Prolog code concurrently to communicate with each other. The primitives he introduces to do this seem rather crude, and not in keeping with the declarative aspects of Prolog. For example, one demonstration shows communication between threads that is achieved by a logic variable “pulsing” as one thread backtracks, causing the variable to mutate in value. In the author’s defense, standard Prolog is very much a sequential language, and the more successful attempts at parallelizing the logic programming paradigm have worked by breaking away from being “parallel Prologs.” If the prime motivation is to have a language that will work exactly as Prolog on straight Prolog code, it may be that concurrent extensions have to be of a “bolt on” nature, rather than integral to the logic programming model. It appears that P# also has additional features to those of Prolog, deriving from linear logic. Appropriate references are given, but there is no coverage of these in the paper.
In summary, the emphasis in this paper is on building a practical tool, which views Prolog in its operational terms rather than its logical terms.