Editorial, March 2012

Dear LPers,

In the last three months we posted several important announcements: various call for papers and positions, the Book Review of Luís Moniz Pereira on the Book by Bob Kowalski, and the new document for ISO Prolog (by Jonathan Hodgson).

The contributions to this issue are mainly concerned with applications of Logic Programming, that are crucial for the growth of the logic programming field and its assertion as a critical problem solving technology to the broadest audience. The contribution by Francesco Calimeri and Francesco Ricca reports on the industrial applications of ASP made with the DLV system. They focus on two main applications but there are many other:

  • computing optimal allocations of the available personnel in a major European seaport in such a way that the right processing of the shoring cargo boats is guaranteed, and
  • an e-tourism system that exploits ASP for finding the best matches between the offers from the tour operators and the requests of the tourists.

The second contribution is by Boon Thau Loo that presents the Network Datalog (NDlog) language, an extension of Datalog used in declarative networking.

ICLP 2012: Now an informal report from ICLP  2012 organization. Great news: Logic Programming  is definitely alive and kicking! We received 102 abstracts!  Roughly 20 of them will be directly accepted as TPLP papers; but probably many more will be accepted as technical communication and presented in Budapest (September 4-8). You have still chance to submit papers in the various ICLP workshops: ASPOCP, CHR, CICLOPS, WCB, LoCoCo, WLPE, and Co-LP, and to participate to the works of WG17. We will have as usual the Doctoral Consortium, and two special events.

  • A special event celebrating the 25th birthday of SWI Prolog, one of our favorite Prolog implementations, and
  • A VERY SPECIAL session where the author(s) of the most influential paper of ICLP 1992 (-20 years) and ICLP 2002 (-10 years) will be presented an award and given the opportunity to present the evolution of their original works. The winners will be kept secret till that day! Don’t miss that session.

But don’t forget PPDP and LOPSTR. Deadlines are approaching and the trip from Budapest to Leuven is very nice!

ALP Web site: The original design we proposed for the ALP web site included the option of providing feedback and comments for each article posted.  Unfortunately we experienced two problems with this design: the first is that we have received very few comments to the articles (14 in two years); the second is that, in spite of using a re-CAPTCHA filter, we continue receiving an overwhelming number of spam messages – in the order of one hundred spam comments per day.

We decided to implement a change in policy to address this situation. We will leave comments open only associated to the Editorial and for the period of one month (of course if there is an active discussion, the deadline will be extended). In case of comments after that date (or on other papers), just send us an email and we will open that page for comments. We apologize for this change, but the amount of spam was not sustainable any longer.

Turing: And now to another topic. Alan Mathison Turing was born in London on June 23rd, 1912. During his short life, he had the time to lay the foundations of Computer Science. Several conferences are dedicated to celebrate the hundredth anniversary of his birth this year.

We would like to add here few lines of Prolog codes (most of you probably have written a variant of this program once in your life) that constitutes (maybe) the shortest and simplest complete Prolog implementation of an interpreter for a Turing machine, and it is a small contribution of Logic Programming to the memory of Alan:

A Turing Machine

%%% turing(+Left_tape_ini,+State_ini,+Symbol_ini,+Right_tape_ini,
%%%        -Left_tape_fin,-State_fin,-Symbol_fin,-Right_tape_fin ).
turing(Left,halt,S,Right, Left,halt,S,Right).

turing([L|L_i],Q,S,R_i,L_o,Q_o,S_o,R_o) :-
           delta(Q,S,Q1,S1,left),
           turing(L_i,Q1,[S1|R_i],L_o,Q_o,S_o,R_o).
turing([],Q,S,R_i,L_o,Q,S_o,R_o) :-
           delta(Q,S,Q1,S1,left),
           turing([bk],Q,S,R_i,L_o,Q,S_o,R_o).
turing(L_i,Q,S,[R|R_i],L_o,Q_o,S_o,R_o) :-
           delta(Q,S,Q1,S1,right),
           turing([S1|L_i],Q1,S1,R_i,L_o,Q_o,S_o,R_o).
turing(L_i,Q,S,[],L_o,Q,S_o,R_o) :-
           delta(Q,S,Q1,S1,right),
           turing(L_i,Q,S,[bk],L_o,Q,S_o,R_o).

where delta is defined using facts of the form:

delta(q0,bk,qa,bk,right).
delta(q0, 0,qb,1,left).
...
delta(qn,1,qc,0,right).

The interpreter is of course called using goals as:

?- turing([],q_0,bk,Input,L_fin,Q_fin,S_fin,R_fin).

Can you come up with a more declarative or simpler implementation? Is your favorite flavor of logic programming capable of doing better? Or maybe functional programming? The challenge is on…

Last but not least,

Happy Easter!

Agostino and Enrico