Starlog is a pure-logic programming language designed to overcome some of the problems inherient in traditional approaches to logic programming.

Starlog was designed as an alternative approach to programming in pure logic. Many of the failings of other logic programming languages can be overcome using the bottom-up evaluation technique. Bottom-up evaluation avoids problems associated with cyclic relations, and allows side-effects to be performed without compromising the declarative semantics of a program.

Using Starlog we advocate a data structure free programming style. That is, predicates in Starlog programs do not contain compound terms for their arguments. This greatly simplifies logic programs and their implementations, lowers the learning curve for new programmers, and forces the programmer to think of all program constructs as relations.

Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.

Calling Peter Van Roy...

...your thoughts?

My thoughts

Bottom-up execution of logic programs is a bridge between logic programming and databases (Starlog continues in the tradition of Datalog and XSB). It also has connections with memoization, transaction processing, and persistence. I think that an important unsolved problem is how to integrate bottom-up execution together with other programming concepts, so that it can be used exactly where it is appropriate. Starlog is at one extreme, where bottom-up execution is taken as the default. Another extreme is a library approach, where database computations (e.g., SQL queries) are called from within a mainstream computation model, but the mainstream model is itself not changed. It would be a real breakthrough if bottom-up execution could be integrated in a more seamless way, e.g., so that it is compositional and so that transactions are possible.

Take a look at LolliMon...

Monadic concurrent linear logic programming

Kevin and the other authors integrated bottom-up and top-down search by separating the two with a monad, and the division between the two falls out naturally from the proof theory of the logical connectives. It's neat.

data structures harmful?

While googling for Hamming numbers, I came across a paper, by the authors of Starlog, with the following cutesey title: Data Structures Considered Harmful (gzipped PostScript, 31K, 10 pages). It presents "an approach to logic programming where the execution of a pure logic program is ordered on 'temporal' values in the program. The resulting programs are relational and avoid a premature commitment to data structures."


The quote reminds me a bit of Elephant. From the blurb:

Elephant source programs may not need data structures, because they can refer directly to the past. Thus a program can say that an airline passenger has a reservation if he has made one and hasn't cancelled it.

Edit: Briefly mentioned previously on LtU