1:- dynamic(current_state/1). 2:- assert(current_state([])). 3 4wumpus(3,1). 5pit(1,3). 6pit(2,5). 7pit(3,3). 8gold(4,4). 9 10 11 12 13perform(turn, []) :- 14 write('turn'), nl, 15 current_state([at(X,Y),facing(D)]), 16 retract(current_state([at(X,Y),facing(D)])), 17 ( D < 4 -> D1 is D+1 ; D1 is 1 ), 18 assert(current_state([at(X,Y),facing(D1)])). 19 20perform(enter, [Breeze,Stench,Glitter]) :- 21 write('enter'), nl, 22 current_state(Z), 23 retract(current_state(Z)), 24 assert(current_state([at(1,1),facing(1)])), 25 ( gold(1,1) -> Glitter = true ; Glitter = false ), 26 ( (wumpus(1,2) ; wumpus(2,1)) -> Stench = true ; 27 Stench = false ), 28 ( (pit(2,1) ; pit(1,2)) -> Breeze = true ; 29 Breeze = false ). 30 31perform(exit, []) :- 32 write('exit'), nl, 33 current_state([at(X,Y),facing(D)]), 34 retract(current_state([at(X,Y),facing(D)])), 35 assert(current_state([])). 36 37perform(grab, []) :- 38 write('grab'), nl. 39 40perform(shoot, [Scream]) :- 41 write('shoot'), nl, 42 current_state([at(X,Y),facing(D)]), 43 wumpus(WX, WY), 44 ( in_direction(X, Y, D, WX, WY), Scream = true ; Scream = false ). 45 46perform(go, [Breeze,Stench,Glitter]) :- 47 write('go'), nl, 48 current_state([at(X,Y),facing(D)]), 49 retract(current_state([at(X,Y),facing(D)])), 50 ( D = 1 -> X1 is X, Y1 is Y+1 ; 51 D = 3 -> X1 is X, Y1 is Y-1 ; 52 D = 2 -> X1 is X+1, Y1 is Y ; 53 D = 4 -> X1 is X-1, Y1 is Y ), 54 assert(current_state([at(X1,Y1),facing(D)])), 55 ( gold(X1,Y1) -> Glitter = true ; Glitter = false ), 56 X_east is X1+1, X_west is X1-1, Y_north is Y1+1, Y_south is Y1-1, 57 ( (wumpus(X_east,Y1) ; wumpus(X1,Y_north) ; 58 wumpus(X_west,Y1) ; wumpus(X1,Y_south)) -> Stench = true ; 59 Stench = false ), 60 ( (pit(X_east,Y1) ; pit(X1,Y_north) ; 61 pit(X_west,Y1) ; pit(X1,Y_south)) -> Breeze = true ; 62 Breeze = false )