This repository has been archived on 2023-08-20. You can view files and clone it, but cannot push or open issues or pull requests.
yap-6.3/Logtalk/examples/lo/planner/planner.lgt
pmoura 3455276aa2 Logtalk 2.26.2 files.
git-svn-id: https://yap.svn.sf.net/svnroot/yap/trunk@1487 b08c6af1-5177-4d33-ba66-4b1c6b8b522a
2005-12-24 18:07:41 +00:00

212 lines
2.8 KiB
Plaintext

% Planner
:- object(plan(_)).
:- info([
author 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.
% Abstractions of City, Airport, and Flight
:- object(city).
:- public(step/3).
:- mode(step(+, +, -), zero_or_more).
:- public(airport/1).
:- mode(airport(?atom), zero_or_more).
step(X, Y, P1-P-P2) :-
\+ same_city(X, Y), !,
X::airport(XA),
Y::airport(YA),
plan(fly)::from(XA, YA, P),
plan(city)::from(X, XA, P1),
plan(city)::from(YA, Y, P2).
step(X, Y, taxi(X, Y)) :-
same_city(X, Y),
X \= Y.
same_city(X, Y) :-
X::airport(A),
Y::airport(A).
:- end_object.
:- object(airport).
:- public(fly/1).
:- mode(fly(?), zero_or_more).
:- public(airport/1).
:- mode(airport(?), zero_or_more).
airport(Airport) :-
self(Airport).
:- end_object.
:- object(fly).
:- public(step/3).
:- mode(step(+, +, -), zero_or_more).
step(From, To, fly(From, To)) :-
From::fly(To).
:- end_object.
% Edinburgh locations
:- object(edinburgh,
extends(city)).
airport(edin).
:- end_object.
:- object(edin,
extends(edinburgh)).
:- end_object.
:- object(castle,
extends(edinburgh)).
:- end_object.
:- object(aiai,
extends(edinburgh)).
:- end_object.
% Glasgow locations
:- object(glasgow,
extends(city)).
airport(renfrew).
:- end_object.
% London locations
:- object(london,
extends(city)).
airport(lhr).
:- end_object.
:- object(albert_hall,
extends(london)).
:- end_object.
:- object(imperial,
extends(london)).
:- end_object.
% Manchester locations
:- object(manchester,
extends(city)).
airport(ringway).
:- end_object.
:- object(victoria,
extends(manchester)).
:- end_object.
% Airports
:- object(aberdeen_air,
extends(airport)).
fly(renfrew).
:- end_object.
:- object(lhr,
extends(airport)).
fly(edin).
fly(ringway).
:- end_object.
:- object(renfrew,
extends(airport)).
fly(aberdeen_air).
fly(ringway).
:- end_object.
:- object(ringway,
extends(manchester, airport)).
fly(lhr).
fly(renfrew).
:- end_object.