Skip to content

Instantly share code, notes, and snippets.

@DonaldKellett
Created December 22, 2018 09:00
Show Gist options
  • Save DonaldKellett/856bc84c8a4128de60368480aab55f9f to your computer and use it in GitHub Desktop.
Save DonaldKellett/856bc84c8a4128de60368480aab55f9f to your computer and use it in GitHub Desktop.
Learn Prolog Now! - Chapter 3 - Practical Session - Programming Exercise 4 - Modes of Transportation
% Knowledge base of travel routes (provided)
% Assumption: these routes are unidirectional
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).
% travel/3 - In order to travel from X to Y, what route(s) and mode(s) of transportation Z should we take?
travel(X, Y, byCar(X, Y)) :- byCar(X, Y).
travel(X, Y, byTrain(X, Y)) :- byTrain(X, Y).
travel(X, Y, byPlane(X, Y)) :- byPlane(X, Y).
travel(X, Y, byCar(X, Z, P)) :- byCar(X, Z), travel(Z, Y, P).
travel(X, Y, byTrain(X, Z, P)) :- byTrain(X, Z), travel(Z, Y, P).
travel(X, Y, byPlane(X, Z, P)) :- byPlane(X, Z), travel(Z, Y, P).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment