Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- person(intern, 1).
- person(assistant, 2).
- person(janitor, 5).
- person(old_professor, 10).
- belongs(X, [X | _]).
- belongs(X, [_ | T]) :- belongs(X, T).
- concat([], L, L).
- concat([H | T], L, [H | C]) :- concat(T, L, C).
- not_belongs(X, [H|T]) :- not(belongs(X, [H|T])).
- delete(X, [X | L], L).
- delete(X, [Y | L], [Y | Tail]) :- delete(X, L, Tail).
- insert(X, L, [X | L]).
- insert(X, [H | T], [H | L]) :- insert(X, T, L).
- max(X, Y, X) :-
- X >= Y.
- max(X, Y, Y) :-
- X < Y.
- findtime([X],Time):- person(X,Time).
- findtime([A,B],Time):- person(A,Ta),person(B,Tb), max(Ta,Tb, Time).
- go_through_bridge(state(PeopleNearTower1, nearTower1, PeopleNearTower2, Time),
- move(delete([X, Y], PeopleNearTower1, New_PeopleNearTower1),
- concat([X, Y], PeopleNearTower2, New_PeopleNearTower2),
- findtime([X, Y], T), New_Time is Time + T),
- state(New_PeopleNearTower1, nearTower2, New_PeopleNearTower2, New_Time)),
- nl, write(X), write(" and "),
- write(Y), write("cross the bridge. Time left: "), write(New_Time).
- go_through_bridge(state(PeopleNearTower1, nearTower2, PeopleNearTower2, Time),
- move(delete(Crossing_People, PeopleNearTower2, New_PeopleNearTower2),
- insert(Crossing_People, PeopleNearTower1, New_PeopleNearTower1),
- findtime(Crossing_People, T), New_Time is Time + T),
- state(New_PeopleNearTower1, nearTower1, New_PeopleNearTower2, New_Time)),
- nl, write(Crossing_People), write(" returns to tower 1. Time left: "), write(New_Time).
- goal(state([], nearTower2, [intern, assistant, janitor, old_professor], 17)).
- goal(state(PeopleNearTower1, LightPos, PeopleNearTower2, T < 18)) :-
- go_through_bridge(state(PeopleNearTower1, LightPos, PeopleNearTower2, T < 18), move(_, _, _, _),
- State), goal(State).
- %?-goal(state([intern, assistant, janitor, old_professor], nearTower1, [], 0)).
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement