% This is a prologish variation % This illstrates how to use the data base to accumulate partial results % and when complete print them out. square( X, SX):- SX is X * X. data(1). data(2). data(3). data(4). data(5). data(6). data(7). data(8). data(9). data(10). % The 'object' sum(S) has two 'methods': add and clear :-dynamic(sum/1). sum(0). clear:-abolish(sum,1),assert(sum(0)). add(I):-retract(sum(S)),S2 is S+I,asserta(sum(S2)). summer:-data(I), square(I, I2), add(I2), fail. summer:-sum(S), write('The sum of data' = S), nl, clear. go:-data(I),square(I,S), write(square(I)=S), nl,fail. go:-write('---------------------'), nl, summer.