| 
									
										
										
										
											2001-06-06 19:40:57 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | :- object(farmer, | 
					
						
							|  |  |  | 	instantiates(state_space)). | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	:- info([ | 
					
						
							|  |  |  | 		version is 1.0, | 
					
						
							| 
									
										
										
										
											2003-02-05 00:15:28 +00:00
										 |  |  | 		author is 'Paulo Moura', | 
					
						
							| 
									
										
										
										
											2001-06-06 19:40:57 +00:00
										 |  |  | 		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. |