Advertisement
Guest User

Untitled

a guest
Sep 28th, 2016
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.78 KB | None | 0 0
  1. person(intern, 1).
  2. person(assistant, 2).
  3. person(janitor, 5).
  4. person(old_professor, 10).
  5.  
  6. belongs(X, [X | _]).
  7. belongs(X, [_ | T]) :- belongs(X, T).
  8.  
  9. concat([], L, L).
  10. concat([H | T], L, [H | C]) :- concat(T, L, C).
  11.  
  12. not_belongs(X, [H|T]) :- not(belongs(X, [H|T])).
  13.  
  14. delete(X, [X | L], L).
  15. delete(X, [Y | L], [Y | Tail]) :- delete(X, L, Tail).
  16.  
  17. insert(X, L, [X | L]).
  18. insert(X, [H | T], [H | L]) :- insert(X, T, L).
  19.  
  20. max(X, Y, X) :-
  21. X >= Y.
  22. max(X, Y, Y) :-
  23. X < Y.
  24.  
  25. findtime([X],Time):- person(X,Time).
  26. findtime([A,B],Time):- person(A,Ta),person(B,Tb), max(Ta,Tb, Time).
  27.  
  28. go_through_bridge(state(PeopleNearTower1, nearTower1, PeopleNearTower2, Time),
  29. move(delete([X, Y], PeopleNearTower1, New_PeopleNearTower1),
  30. concat([X, Y], PeopleNearTower2, New_PeopleNearTower2),
  31. findtime([X, Y], T), New_Time is Time + T),
  32. state(New_PeopleNearTower1, nearTower2, New_PeopleNearTower2, New_Time)),
  33. nl, write(X), write(" and "),
  34. write(Y), write("cross the bridge. Time left: "), write(New_Time).
  35.  
  36. go_through_bridge(state(PeopleNearTower1, nearTower2, PeopleNearTower2, Time),
  37. move(delete(Crossing_People, PeopleNearTower2, New_PeopleNearTower2),
  38. insert(Crossing_People, PeopleNearTower1, New_PeopleNearTower1),
  39. findtime(Crossing_People, T), New_Time is Time + T),
  40. state(New_PeopleNearTower1, nearTower1, New_PeopleNearTower2, New_Time)),
  41. nl, write(Crossing_People), write(" returns to tower 1. Time left: "), write(New_Time).
  42.  
  43. goal(state([], nearTower2, [intern, assistant, janitor, old_professor], 17)).
  44. goal(state(PeopleNearTower1, LightPos, PeopleNearTower2, T < 18)) :-
  45. go_through_bridge(state(PeopleNearTower1, LightPos, PeopleNearTower2, T < 18), move(_, _, _, _),
  46. State), goal(State).
  47.  
  48. %?-goal(state([intern, assistant, janitor, old_professor], nearTower1, [], 0)).
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement