1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
|
:- object(farmer,
instantiates(state_space)).
:- info([
version is 1.0,
author is 'Paulo Moura',
date is 1998/3/23,
comment is 'Farmer, cabbage, goat, and wolf state space search problem.']).
initial_state(start, (north, north, north, north)).
goal_state(end, (south, south, south, south)).
next_state((Cabbage, Goat, Wolf, Farmer), (FCabbage, Goat, Wolf, FFarmer)) :-
same_side(Farmer, Cabbage),
\+ same_side(Goat, Wolf),
flip(Farmer, FFarmer),
flip(Cabbage, FCabbage).
next_state((Cabbage, Goat, Wolf, Farmer), (Cabbage, FGloat, Wolf, FFarmer)) :-
same_side(Farmer, Goat),
flip(Farmer, FFarmer),
flip(Goat, FGloat).
next_state((Cabbage, Goat, Wolf, Farmer), (Cabbage, Goat, FWolf, FFarmer)) :-
same_side(Farmer, Wolf),
\+ same_side(Cabbage, Goat),
flip(Farmer, FFarmer),
flip(Wolf, FWolf).
next_state((Cabbage, Goat, Wolf, Farmer), (Cabbage, Goat, Wolf, FFarmer)) :-
\+ same_side(Cabbage, Goat),
\+ same_side(Goat, Wolf),
flip(Farmer, FFarmer).
flip(north, south).
flip(south, north).
same_side(north, north).
same_side(south, south).
print_state((Cabbage, Goat, Wolf, Farmer)) :-
(Cabbage = north -> write(c); write('_')),
(Goat = north -> write(g); write('_')),
(Wolf = north -> write(w); write('_')),
(Farmer = north -> write('f.<__>.........._'); write('_..........<__>.f')),
(Cabbage = north -> write('_'); write(c)),
(Goat = north -> write('_'); write(g)),
(Wolf = north -> write('_'); write(w)),
nl.
:- end_object.
|