Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- location(doorway).
- location(window).
- location(center).
- location(wall).
- longObject(stick).
- object(X) :- longObject(X).
- object(bananas).
- climbable(chair).
- :- discontiguous can/2.
- :- discontiguous adds/2.
- :- discontiguous deletes/2.
- % move to locations
- % this is done for you
- can(move(From, To), [on(monkey, floor), at(monkey, From)]) :-
- location(From),
- location(To),
- To \== From.
- adds(move(_, To), [at(monkey, To)]).
- deletes(move(From, _), [at(monkey, From)]).
- % carry objects
- % < PART: D CODE GOES HERE >
- can(pickup(Object, Location), [on(monkey,floor), on(Object, floor), at(Object, Location), at(monkey, Location)]) :-
- location(Location),
- object(Object).
- adds(pickup(Object, Location), [has(Object)]).
- deletes(pickup(Object, Location), [on(Object, floor), at(Object, Location)]).
- % push climbables
- % < PART: E CODE GOES HERE >
- can(push(Climbable, From, To), [on(monkey, floor), on(Climbable, floor), at(monkey, From), at(Climbable, From)]) :-
- climbable(Climbable),
- location(To),
- location(From),
- To \== From.
- adds(push(Climbable, From, To), [at(monkey, To), at(Climbable, To)]).
- deletes(push(Climbable, From, To), [at(monkey, From), at(Climbable, From)]).
- % climb up climbable
- % < PART: F CODE GOES HERE >
- can(climbUp(Climbable, Location), [on(monkey, floor), on(Climbable, floor), at(monkey, Location), at(Climbable, Location)]) :-
- climbable(Climbable),
- location(Location).
- adds(climbUp(Climbable, Location), [on(monkey, Climbable)]).
- deletes(climbUp(Climbable, Location), [on(monkey, floor)]).
- % climb down climbable
- % < PART: F CODE GOES HERE >
- can(climbDown(Climbable, Location), [on(monkey, Climbable), at(monkey, Location)]) :-
- climbable(Climbable),
- location(Location).
- adds(climbDown(Climbable, Location), [on(monkey, floor)]).
- deletes(climbDown(Climbable, Location), [on(monkey, Climbable)]).
- % wave stick
- % < PART: G CODE GOES HERE >
- can(waveStick(Object, Climbable, Location, LongObject), [on(monkey, Climbable), at(monkey, Location), at(Climbable, Location), at(Object, Location), on(Object, ceiling), has(LongObject)]) :-
- object(Object),
- location(Location),
- climbable(Climbable),
- longObject(LongObject).
- adds(waveStick(Object, Climbable, Location, LongObject), [on(Object, floor)]).
- deletes(waveStick(Object, Climbable, Location, LongObject), [on(Object, ceiling)]).
- % means ends
- meansEnds(State, Goals, [], State) :-
- goalsMet(State, Goals).
- meansEnds(State, Goals, Plan, FinalState) :-
- append(PrePlan, [Action | PostPlan], Plan),
- nextGoal(State, Goals, Goal),
- causes(Action, Goal),
- can(Action, PreCondition),
- meansEnds(State, PreCondition, PrePlan, PreActionMidState),
- takeAction(PreActionMidState, Action, PostActionMidState),
- meansEnds(PostActionMidState, Goals, PostPlan, FinalState).
- goalsMet(State, []).
- goalsMet(State, [Goal | OtherGoals]) :-
- member(Goal, State),
- goalsMet(State, OtherGoals).
- nextGoal(State, Goals, Goal) :-
- member(Goal, Goals),
- \+member(Goal, State).
- causes(Action, Goal) :-
- adds(Action, AddedRelations),
- member(Goal, AddedRelations).
- takeAction(State, Action, NewState) :-
- deletes(Action, RemovedRelations),
- subtract(State, RemovedRelations, State1),
- !,
- adds(Action, AddedRelations),
- append(AddedRelations, State1, NewState).
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement