Advertisement
Guest User

Untitled

a guest
Dec 12th, 2019
110
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.75 KB | None | 0 0
  1. mode(102, 5).
  2. mode(99, 80).
  3. mode(116, 100).
  4. mode(112, 500).
  5.  
  6. route(dublin, cork, 200, 'fct').
  7. route(cork, dublin, 200, 'fct').
  8. route(cork, corkAirport, 20, 'fc').
  9. route(corkAirport, cork, 25, 'fc').
  10. route(dublin, dublinAirport, 10, 'fc').
  11. route(dublinAirport, dublin, 20, 'fc').
  12. route(dublinAirport, corkAirport, 225, 'p').
  13. route(corkAirport, dublinAirport, 225, 'p').
  14.  
  15. myTime(V, Distance, Tmp) :- Tmp is ((Distance / V) * 60).
  16.  
  17. myAdd(Tmp, Tmp2, Time) :- Tmp2 is 0, Time is Tmp + Tmp2.
  18. myAdd(Tmp, Tmp2, Time) :- Time is Tmp + Tmp2.
  19.  
  20. get_index(Index, New_index) :- New_index is 1 + Index.
  21.  
  22. % get a path from start to end
  23. path(Start, End, Path) :-
  24. path(Start, End, [Start], Path).
  25.  
  26. % when target reached, reverse the visited list
  27. path(End, End, RPath, Path) :-
  28. reverse(RPath, Path).
  29.  
  30. % take non deterministically an edge, check if already visited before use
  31. path(Start, End, Visited, Path) :-
  32. route(Start, Next, _, _),
  33. \+ memberchk(Next, Visited),
  34. path(Next, End, [Next|Visited], Path).
  35.  
  36.  
  37. journey(A, B, M, Sets) :- string_to_list(M, List_m),
  38. reverse(List_m, Reverse_m),
  39. setof(X, path(A, B, X), Sets),
  40. Newlist is 0,
  41. destinations(Sets, Reverse_m, Newlist, Return_list), !,
  42. Index is 0,
  43. findShortest(Return_list, Shortest, Index, New_index),
  44. write(Shortest),
  45. write(New_index).
  46. %findMin(Return_list),
  47. %write(List_of_routes).
  48.  
  49.  
  50. findShortest([X|T], X, _, _) :- T is 0, !.
  51. findShortest([X, Y|T], Shortest, Index, New_index) :- X < Y, !, get_index(Index, New_index), findShortest([X|T], Shortest, Index, New_index).
  52. findShortest([_, Y|T], Shortest, Index, New_index) :- get_index(Index, New_index), findShortest([Y|T], Shortest, Index, New_index).
  53.  
  54.  
  55. destinations([], _, Return_list, Return_list).
  56. destinations([H|T], Reverse_m, Newlist, Return_list) :- Tmp2 is 0,
  57. findDistance(H, Reverse_m, Tmp2, Return),
  58. destinations(T, Reverse_m, [Return|Newlist], Return_list).
  59.  
  60.  
  61. findDistance([_|Tail], _, Time, Time) :- Tail == [].
  62.  
  63. findDistance([H1, H2|T], Reverse_m, Tmp2, Return) :- Tmp2 is 0, route(H1, H2, Distance, Mode),
  64. findMode(Mode, Reverse_m, Transport),
  65. mode(Transport, V),
  66. myTime(V, Distance, Tmp),
  67. myAdd(Tmp, Tmp2, Time),
  68. findDistance([H2|T], Reverse_m, Time, Return).
  69.  
  70. findDistance([H1, H2|T], Reverse_m, Tmp2, Return) :- route(H1, H2, Distance, Mode),
  71. findMode(Mode, Reverse_m, Transport),
  72. mode(Transport, V),
  73. myTime(V, Distance, Tmp),
  74. myAdd(Tmp, Tmp2, Time),
  75. findDistance([H2|T], Reverse_m, Time, Return).
  76.  
  77.  
  78. findMode(Mode, R_input, Transport) :- string_to_list(Mode, Mode_L),
  79. checkMode(R_input, Mode_L, Transport).
  80.  
  81. checkMode([H|_], R_mode, Transport) :- member(H, R_mode), !, Transport is H.
  82. checkMode([_|T], R_mode, Transport) :- checkMode(T, R_mode, Transport).
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement