%-*-prolog-*-
% operator(-Op, -Pre, -Del, -Add)
% operator definitions
% Pre is a list of state preconditions
% After Op is applied
% Del gets deleted from state
% Add gets added to state
operator(putDirtyDishFromBench(X),
pre: [dirty(X), at(X,bench)],
del: [at(X,bench)],
add: [at(X,sink)]).
operator(putDirtyDishFromDrainer(X),
pre: [dirty(X), at(X,drainer)],
del: [at(X,drainer)],
add: [at(X,sink)]).
operator(putDryDishInSink(X),
pre: [dry(X), at(X,drainer)],
del: [dry(X), at(X,drainer)],
add: [cleanButWet(X), at(X,sink)]).
operator(putDryDishInCupboardFromDrainer(X),
pre: [dry(X), at(X,drainer)],
del: [at(X,drainer)],
add: [at(X,cupboard)]).
operator(putDryDishInCupboardFromBench(X),
pre: [dry(X), at(X,bench)],
del: [at(X,bench)],
add: [at(X,cupboard)]).
operator(putCleanButWetDishFromSink(X),
pre: [cleanButWet(X), at(X,sink)],
del: [at(X,sink)],
add: [at(X,drainer)]).
operator(putCleanButWetDishFromBench(X),
pre: [cleanButWet(X), at(X,bench)],
del: [at(X,bench)],
add: [at(X,drainer)]).
operator(pickUpTool(X,Y),
pre: [holding(X)],
del: [holding(X)],
add: [holding(Y)]).
operator(processInSink(X),
pre: [dirty(X), at(X, sink), holding(dishbrush)],
del: [dirty(X)],
add: [cleanButWet(X)]).
operator(processInDrainer(X),
pre: [cleanButWet(X), at(X, drainer), holding(teatowel)],
del: [cleanButWet(X)],
add: [dry(X)]).
% instantiate(?Operator)
% Makes Operator ground (including its pre, del and add lists)
instantiate(putDirtyDishFromBench(X)) :- dish(X).
instantiate(putDirtyDishFromDrainer(X)) :- dish(X).
instantiate(putDryDishInSink(X)) :- dish(X).
instantiate(putDryDishInCupboardFromDrainer(X)) :- dish(X).
instantiate(putDryDishInCupboardFromBench(X)) :- dish(X).
instantiate(putCleanButWetDishFromSink(X)) :- dish(X).
instantiate(putCleanButWetDishFromBench(X)) :- dish(X).
instantiate(pickUpTool(X,Y)) :- tool(X), tool(Y), X\==Y.
instantiate(processInSink(X)) :- dish(X).
instantiate(processInDrainer(X)) :- dish(X).
% dish(?Object)
% Object is a dish
dish(dish1).
dish(dish2).
dish(dish3).
dish(dish4).
dish(dish5).
% tool(?Object)
% Object is a tool
tool(dishbrush).
tool(teatowel).
tool(nothing).
% location(?Object)
% Object is a location
location(bench).
location(sink).
location(drainer).
location(cupboard). |