47 lines
		
	
	
		
			961 B
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			47 lines
		
	
	
		
			961 B
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								:- object(plan(_)).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									:- info([
							 | 
						||
| 
								 | 
							
										authors is 'Paulo Moura',
							 | 
						||
| 
								 | 
							
										version is 1.0,
							 | 
						||
| 
								 | 
							
										date is 2000/4/22,
							 | 
						||
| 
								 | 
							
										comment is 'Air-line trip planner.',
							 | 
						||
| 
								 | 
							
										parnames is ['Mode'],
							 | 
						||
| 
								 | 
							
										source is 'Example adopted from the Francis G. McCabe L&O documentation.']).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									:- public(from/3).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									:- mode(from(+atom, +atom, -list), zero_or_more).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									:- info(from/3,
							 | 
						||
| 
								 | 
							
										[comment is 'Plan a trip from Start to Destination.',
							 | 
						||
| 
								 | 
							
										 argnames is ['Start', 'Destination', 'Plan']]).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									from(Start, Destination, Plan) :-
							 | 
						||
| 
								 | 
							
										from(Start, Destination, [], Plan).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									from(Start, Destination, _, [Step]) :-
							 | 
						||
| 
								 | 
							
										parameter(1, Mode),
							 | 
						||
| 
								 | 
							
										Mode::step(Start, Destination, Step),
							 | 
						||
| 
								 | 
							
										!.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									from(Start, Destination, Locations, [Step| Steps]) :-
							 | 
						||
| 
								 | 
							
										parameter(1, Mode),
							 | 
						||
| 
								 | 
							
										Mode::step(Start, City2, Step),
							 | 
						||
| 
								 | 
							
										not_member(City2, Locations),
							 | 
						||
| 
								 | 
							
										from(City2, Destination, [Start| Locations], Steps).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									not_member(_, []).
							 | 
						||
| 
								 | 
							
									
							 | 
						||
| 
								 | 
							
									not_member(City, [Location| Locations]) :-
							 | 
						||
| 
								 | 
							
										City \= Location,
							 | 
						||
| 
								 | 
							
										not_member(City, Locations).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								:- end_object.
							 |