This repository has been archived on 2023-08-20. You can view files and clone it, but cannot push or open issues or pull requests.
yap-6.3/Logtalk/examples/searching/farmer.lgt
2001-06-06 19:40:57 +00:00

64 lines
1.5 KiB
Plaintext

:- object(farmer,
instantiates(state_space)).
:- info([
version is 1.0,
authors 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.