/*-------------------------------------------------------------------------
    program: producer/consumer problem (unbounded multi-buffer)
    file:    pcumb
    date:    December 97
    author:  Pablo Lopez (lopez@lcc.uma.es)
             Dept. of CS
             University of Malaga, SPAIN
 
    sample goal:
        go([1,2,3],O)
-------------------------------------------------------------------------*/

module pcumb.

producer(P,[I|Is])
      <= P1 is P+1
      *- cell(P,I) # producer(P1,Is).

producer(_,[]) *- bot.

consumer(C,Os) # cell(C,I)
      <= insert(p(I),Os,OsO)
      <= C1 is C+1
      *- consumer(C1,OsO).

consumer(_,O) # result(O).

insert(X,[],[X]).
insert(X,[Y|Ys],[Y|Zs]) <= insert(X,Ys,Zs).

go(I,O) *- producer(0,I) # consumer(0,[]) # result(O).

