Add practical no. 1 and 2 from chapter 3.
This commit is contained in:
		
							parent
							
								
									5dd0bfcf19
								
							
						
					
					
						commit
						311a24961c
					
				| 
						 | 
					@ -0,0 +1,60 @@
 | 
				
			||||||
 | 
					%% Imagine that the following knowledge base describes a maze. The
 | 
				
			||||||
 | 
					%% facts determine which points are connected, that is, from which
 | 
				
			||||||
 | 
					%% points you can get to which other points in one step. Furthermore,
 | 
				
			||||||
 | 
					%% imagine that all paths are one-way streets, so that you can only
 | 
				
			||||||
 | 
					%% walk them in one direction. So, you can get from point 1 to point
 | 
				
			||||||
 | 
					%% 2, but not the other way round.
 | 
				
			||||||
 | 
					connected(1,2).
 | 
				
			||||||
 | 
					connected(3,4).
 | 
				
			||||||
 | 
					connected(5,6).
 | 
				
			||||||
 | 
					connected(7,8).
 | 
				
			||||||
 | 
					connected(9,10).
 | 
				
			||||||
 | 
					connected(12,13).
 | 
				
			||||||
 | 
					connected(13,14).
 | 
				
			||||||
 | 
					connected(15,16).
 | 
				
			||||||
 | 
					connected(17,18).
 | 
				
			||||||
 | 
					connected(19,20).
 | 
				
			||||||
 | 
					connected(4,1).
 | 
				
			||||||
 | 
					connected(6,3).
 | 
				
			||||||
 | 
					connected(4,7).
 | 
				
			||||||
 | 
					connected(6,11).
 | 
				
			||||||
 | 
					connected(14,9).
 | 
				
			||||||
 | 
					connected(11,15).
 | 
				
			||||||
 | 
					connected(16,12).
 | 
				
			||||||
 | 
					connected(14,17).
 | 
				
			||||||
 | 
					connected(16,19).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					%% Write a predicate path/2 that tells you from which points in the
 | 
				
			||||||
 | 
					%% maze you can get to which other points when chaining together
 | 
				
			||||||
 | 
					%% connections given in the above knowledge base. Can you get from
 | 
				
			||||||
 | 
					%% point 5 to point 10? Which other point can you get to when starting
 | 
				
			||||||
 | 
					%% at point 1? And which points can be reached from point 13?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					path(X, Y) :- connected(X, Y).
 | 
				
			||||||
 | 
					path(X, Y) :- connected(X, Z),
 | 
				
			||||||
 | 
						      path(Z, Y).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					%% Questions:
 | 
				
			||||||
 | 
					%% 1. Can you get from point 5 to point 10? Yes:
 | 
				
			||||||
 | 
					%%
 | 
				
			||||||
 | 
					%%     ?- path(5, 10).
 | 
				
			||||||
 | 
					%%     true .
 | 
				
			||||||
 | 
					%%
 | 
				
			||||||
 | 
					%% 2. Which other point can you get when starting at point 1? You can't
 | 
				
			||||||
 | 
					%%    get to any other points:
 | 
				
			||||||
 | 
					%%
 | 
				
			||||||
 | 
					%%     ?- path(1, P).
 | 
				
			||||||
 | 
					%%     P = 2 ;
 | 
				
			||||||
 | 
					%%     false.
 | 
				
			||||||
 | 
					%%
 | 
				
			||||||
 | 
					%% 3. Which points can be reached from point 13? Points 9, 10, 14, 17,
 | 
				
			||||||
 | 
					%%    18.
 | 
				
			||||||
 | 
					%%
 | 
				
			||||||
 | 
					%%     ?- path(13, P).
 | 
				
			||||||
 | 
					%%     P = 14 ;
 | 
				
			||||||
 | 
					%%     P = 9 ;
 | 
				
			||||||
 | 
					%%     P = 17 ;
 | 
				
			||||||
 | 
					%%     P = 10 ;
 | 
				
			||||||
 | 
					%%     P = 18 ;
 | 
				
			||||||
 | 
					%%     false.
 | 
				
			||||||
| 
						 | 
					@ -11,3 +11,49 @@ directTrain(nancy,metz).
 | 
				
			||||||
travelFromTo(X, Y) :- directTrain(X, Y).
 | 
					travelFromTo(X, Y) :- directTrain(X, Y).
 | 
				
			||||||
travelFromTo(X, Y) :- directTrain(X, Z),
 | 
					travelFromTo(X, Y) :- directTrain(X, Z),
 | 
				
			||||||
                      travelFromTo(Z, Y).
 | 
					                      travelFromTo(Z, Y).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					%% New version from practical exercises.
 | 
				
			||||||
 | 
					%% We are given the following knowledge base of travel information:
 | 
				
			||||||
 | 
					byCar(auckland,hamilton).
 | 
				
			||||||
 | 
					byCar(hamilton,raglan).
 | 
				
			||||||
 | 
					byCar(valmont,saarbruecken).
 | 
				
			||||||
 | 
					byCar(valmont,metz).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					byTrain(metz,frankfurt).
 | 
				
			||||||
 | 
					byTrain(saarbruecken,frankfurt).
 | 
				
			||||||
 | 
					byTrain(metz,paris).
 | 
				
			||||||
 | 
					byTrain(saarbruecken,paris).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					byPlane(frankfurt,bangkok).
 | 
				
			||||||
 | 
					byPlane(frankfurt,singapore).
 | 
				
			||||||
 | 
					byPlane(paris,losAngeles).
 | 
				
			||||||
 | 
					byPlane(bangkok,auckland).
 | 
				
			||||||
 | 
					byPlane(singapore,auckland).
 | 
				
			||||||
 | 
					byPlane(losAngeles,auckland).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					%% Write a predicate travel/2 which determines whether it is possible
 | 
				
			||||||
 | 
					%% to travel from one place to another by chaining together car,
 | 
				
			||||||
 | 
					%% train, and plane journeys. For example, your program should answer
 | 
				
			||||||
 | 
					%% yes to the query travel(valmont,raglan).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					%% The base case is a direct route via car, train or plane.
 | 
				
			||||||
 | 
					travelDirect(X, Y) :- byCar(X, Y).
 | 
				
			||||||
 | 
					travelDirect(X, Y) :- byTrain(X, Y).
 | 
				
			||||||
 | 
					travelDirect(X, Y) :- byPlane(X, Y).
 | 
				
			||||||
 | 
					travel(X, Y)       :- travelDirect(X, Y).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					%% The recursive case chains these together.
 | 
				
			||||||
 | 
					travel(X, Y) :- travel(X, Z),
 | 
				
			||||||
 | 
							travel(Z, Y).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					%% So, by using travel/2 to query the above database, you can find out
 | 
				
			||||||
 | 
					%% that it is possible to go from Valmont to Raglan. If you are
 | 
				
			||||||
 | 
					%% planning such a voyage, that’s already something useful to know,
 | 
				
			||||||
 | 
					%% but you would probably prefer to have the precise route from
 | 
				
			||||||
 | 
					%% Valmont to Raglan. Write a predicate travel/3 which tells you which
 | 
				
			||||||
 | 
					%% route to take when travelling from one place to another. For
 | 
				
			||||||
 | 
					%% example, the program should respond
 | 
				
			||||||
 | 
					%% X  =  go(valmont,metz,
 | 
				
			||||||
 | 
					%%  	      go(metz,paris,
 | 
				
			||||||
 | 
					%%  		    go(paris,losAngeles)))
 | 
				
			||||||
 | 
					%% to the query travel(valmont,losAngeles,X).
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue