m=15, n=11. lin b(1;m,1;n,:[ c,m,c,c,c,c,c,c,c,c,c,m,m,m,m, c,c,c,m,c,m,m,c,m,m,c,c,m,m,m, m,m,m,c,c,c,c,c,m,m,m,c,c,c,m, m,m,c,c,m,m,m,c,m,m,m,m,m,c,m, m,m,c,m,c,c,c,c,c,m,m,m,m,c,m, c,c,c,m,o,m,m,m,c,m,c,c,c,c,m, c,m,m,m,m,c,c,c,m,m,m,m,m,m,m, c,c,c,m,c,c,m,c,m,m,m,m,m,c,m, m,c,c,c,c,m,m,c,m,m,c,c,c,c,c, c,c,m,c,m,m,m,c,c,c,c,m,m,m,c, c,m,c,c,m,m,m,m,m,c,m,m,m,m,c ]). xs=1, ys=1, xt=15, yt=11. maze :- b(xs,ys,c) * rule(xs,ys). rule(xt,yt) :- out * delete. rule(X,Y) :- (`X1=X` * (`Y1=Y-1` + `Y1=Y+1`) + (`X1=X-1` + `X1=X+1`) * `Y1=Y`) * b(X1,Y1,c) * rule(X1,Y1). // ------------------------ output ----------------------------------------- out :- write(nl) * line * forI(1) * line. line :- write(nl,' ') * repeat(m+2) * write('-') * fail + succ. forI(n+1). forI(I) :- write(nl,' ') * (I==ys * write('-> ') + write(' |')) * forJ(I,1) * (I==yt * write(' ->') + write('|')) * `I1=I+1` * forI(I1). forJ(_,m+1). forJ(I,J) :- (b(J,I,Y) * (Y==m * write('o') + write('.')) + write('#')) * `J1=J+1` * forJ(I,J1).