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, Z),
|
||||
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