Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- mode(102, 5).
- mode(99, 80).
- mode(116, 100).
- mode(112, 500).
- route(dublin, cork, 200, 'fct').
- route(cork, dublin, 200, 'fct').
- route(cork, corkAirport, 20, 'fc').
- route(corkAirport, cork, 25, 'fc').
- route(dublin, dublinAirport, 10, 'fc').
- route(dublinAirport, dublin, 20, 'fc').
- route(dublinAirport, corkAirport, 225, 'p').
- route(corkAirport, dublinAirport, 225, 'p').
- myTime(V, Distance, Tmp) :- Tmp is ((Distance / V) * 60).
- myAdd(Tmp, Tmp2, Time) :- Tmp2 is 0, Time is Tmp + Tmp2.
- myAdd(Tmp, Tmp2, Time) :- Time is Tmp + Tmp2.
- get_index(Index, New_index) :- New_index is 1 + Index.
- % get a path from start to end
- path(Start, End, Path) :-
- path(Start, End, [Start], Path).
- % when target reached, reverse the visited list
- path(End, End, RPath, Path) :-
- reverse(RPath, Path).
- % take non deterministically an edge, check if already visited before use
- path(Start, End, Visited, Path) :-
- route(Start, Next, _, _),
- \+ memberchk(Next, Visited),
- path(Next, End, [Next|Visited], Path).
- journey(A, B, M, Sets) :- string_to_list(M, List_m),
- reverse(List_m, Reverse_m),
- setof(X, path(A, B, X), Sets),
- Newlist is 0,
- destinations(Sets, Reverse_m, Newlist, Return_list), !,
- Index is 0,
- findShortest(Return_list, Shortest, Index, New_index),
- write(Shortest),
- write(New_index).
- %findMin(Return_list),
- %write(List_of_routes).
- findShortest([X|T], X, _, _) :- T is 0, !.
- findShortest([X, Y|T], Shortest, Index, New_index) :- X < Y, !, get_index(Index, New_index), findShortest([X|T], Shortest, Index, New_index).
- findShortest([_, Y|T], Shortest, Index, New_index) :- get_index(Index, New_index), findShortest([Y|T], Shortest, Index, New_index).
- destinations([], _, Return_list, Return_list).
- destinations([H|T], Reverse_m, Newlist, Return_list) :- Tmp2 is 0,
- findDistance(H, Reverse_m, Tmp2, Return),
- destinations(T, Reverse_m, [Return|Newlist], Return_list).
- findDistance([_|Tail], _, Time, Time) :- Tail == [].
- findDistance([H1, H2|T], Reverse_m, Tmp2, Return) :- Tmp2 is 0, route(H1, H2, Distance, Mode),
- findMode(Mode, Reverse_m, Transport),
- mode(Transport, V),
- myTime(V, Distance, Tmp),
- myAdd(Tmp, Tmp2, Time),
- findDistance([H2|T], Reverse_m, Time, Return).
- findDistance([H1, H2|T], Reverse_m, Tmp2, Return) :- route(H1, H2, Distance, Mode),
- findMode(Mode, Reverse_m, Transport),
- mode(Transport, V),
- myTime(V, Distance, Tmp),
- myAdd(Tmp, Tmp2, Time),
- findDistance([H2|T], Reverse_m, Time, Return).
- findMode(Mode, R_input, Transport) :- string_to_list(Mode, Mode_L),
- checkMode(R_input, Mode_L, Transport).
- checkMode([H|_], R_mode, Transport) :- member(H, R_mode), !, Transport is H.
- checkMode([_|T], R_mode, Transport) :- checkMode(T, R_mode, Transport).
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement