:- expects_dialect(lps). maxTime(10). fluents at_pos/2, free/2, visited/2, obstacle/2, life/2, lookingtowards/2. actions step(X,Y), turn_right, report. initially at_pos(0,0), life(2,1), free(1,0), free(2,0), obstacle(3,0), obstacle(2, -1), obstacle(2,1), lookingtowards(1,0). step(X,Y) terminates lookingtowards(X,Y). step(X,Y) initiates lookingtowards(X,Z) if at_pos(X,Y0), lookingtowards(X,Y), Diff is Y-Y0, abs(Diff) >0, Z is Y + Diff. step(X,Y) initiates lookingtowards(Z,Y) if at_pos(X0,Y), lookingtowards(X,Y), Diff is X-X0, abs(Diff) >0, Z is X + Diff. step(X,Y) initiates at_pos(X,Y). step(X2,Y2) terminates at_pos(X,Y) if at_pos(X,Y). %, (X2\==X;Y\==Y2). step(X,Y) terminates free(X,Y). step(X2,Y2) initiates visited(X,Y) if at_pos(X,Y). step(X2,Y2) initiates free(X,Y) if at_pos(X,Y). turn_right terminates lookingtowards(X,Y). turn_right initiates lookingtowards(X,Yminus) if at_pos(X,Y), lookingtowards(Xplus,Y), Xplus is X+1, Yminus is Y-1. turn_right initiates lookingtowards(Xminus,Y) if at_pos(X,Y), lookingtowards(X,Yminus), Xminus is X-1, Yminus is Y-1. turn_right initiates lookingtowards(X,Yplus) if at_pos(X,Y), lookingtowards(Xminus,Y), Xminus is X-1, Yplus is Y+1. turn_right initiates lookingtowards(Xplus,Y) if at_pos(X,Y), lookingtowards(X,Yplus), Xplus is X+1, Yplus is Y+1. % false free(X,Y), obstacle(X,Y). %false at_pos(X,Y), step(X,Y). false visited(X,Y), step(X,Y). false life(X,Y), lookingtowards(X,Y), turn_right. if lookingtowards(X,Y), free(X,Y) %not(at_pos(X,Y)) % not(visited(X,Y)) then step(X,Y). if lookingtowards(X,Y), free(X,Y), visited(X,Y) then turn_right. if lookingtowards(X,Y), obstacle(X,Y) % not(life(X,Y)) then turn_right. if lookingtowards(X,Y), obstacle(X,Y), life(X,Y) then report. %, turn_right. /** ?- go(Timeline). ?- go. */