64 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			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.
							 |