:- 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.