% A model of movement - state is set of facts object at place :-op(690, xfx, at). :-dynamic(at/2). is_place(X):-_ at X. is_object(X):-X at _. % 'put' is already in reserved for char output. place(X,At):-assert(X at At), write(X), write(' is now at '), write_ln(At),!. take(X,From):-retract(X at From), write(X), write(' was at '), write_ln(From),!. move(X, To):-move(X,_,To). move(X, From, To):-retract(X at From), write(X), write(' was at '), write_ln(From), assert(X at To), write(X), write(' is now at '), write_ln(To),!. d:-X at Y, write(X), write(' is at '), write_ln(Y), nl, fail. q:-halt.