Programming Paradigms of the Andorra Kernel Language

Programming Paradigms of the Andorra Kernel Language
The Andorra Kernel Language (AKL) is introduced. It is shown how AKL provides the programming paradigms of both Prolog and GHC. This is the original goal of the design. However, it has also been possible to provide capabilities beyond that of Prolog and GHC. There are means to structure search, more powerful than plain backtracking. It is possible to encapsulate search in concurrent reactive processes. It is also possible to write a multi-way merger with constant delay. In these respects AKL is quite original. Although AKL is an instance of our previously introduced Kernel Andorra Prolog framework, this exposition contains important extensions, and a considerable amount of unnecessary formal overhead has been stripped away.
That's the AKL that is a predecessor of Oz (and was codeveloped by a coauthor of CTM, Seif Haridi).

While not the latest word in its area (published in 1991), it is well worth reading (and I don't remember seeing links to it on LtU).

Comment viewing options

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

Guarded clauses. commit and soft cut

I've been doing a little bit of research into what kind of operators are needed to have a logic that deals with server like processes and effects in a natural way. In functional program languages we can use monads to encapsulate effects, but in logic programming it seems things may be more complicated. For instance the following predicate may never terminate:

P :- Q,P

If Q is suppose to perform I/O and the predicate succeeds, we still aren't able to decide whether or not we will fail later, since Q will be called again. For this reason if we make any unretractable effect we may have done so in error.

In order to deal with this we need a commit, soft cut or a guard. When these operators are added, what type of logic is induced? Are our predicates still going to be compositional under the usual operators ('and' and 'or')?

I figured some of you who are more familiar with AKL might be able to explain this or point me at the relevant literature.



Have you looked at Mercury, as a matter of interest? Pure declarative I/O using "unique modes", which are like linear types only they're also nondeterminism-safe.