Я понял это благодаря опубликованной паучьей программе, и вот что я сделал:
:- dynamic at/2, i_am_at/1.
:- retractall(at(_, _)), retractall(i_am_at(_)).
i_am_at(car).
go_to_gas_station :- goto(gas_station).
go_to_car :- goto(car).
open_car_door :- open(car_door).
open_gas_station_door :- open(gas_station_door).
take_soda :- take(soda).
take_newspaper :- take(newspaper).
path(car, gas_station, gas_station) :- at(car_door, open),
at(gas_station_door, open).
path(car, gas_station, gas_station) :-
write('Cant get there! Open the doors first.'), nl,
!, fail.
path(gas_station, car, car) :- at(soda, in_hand),
at(newspaper, in_hand),
i_am_at(gas_station),
write('Thanks for playing.').
path(gas_station, car, car) :-
write('Did you forget something?'), nl,
!, fail.
open(X) :-
at(X, open),
write('Door is already open!'),
nl, !.
open(X) :-
assert(at(X, open)),
write('Door is now open.'),
nl, !.
goto(Direction) :-
i_am_at(Here),
path(Here, Direction, There),
write('You are now at '), write(Direction),
retract(i_am_at(Here)),
assert(i_am_at(There)), !.
take(X) :-
at(X, in_hand),
write('You already have it!'),
nl, !.
take(X) :-
assert(at(X, in_hand)),
write('You now have '), write(X),
nl, !.
Моя единственная проблема в том, что, как и сейчас, вы можете взять газировку и газету. независимо от того, где вы находитесь, вы сможете принимать их только тогда, когда находитесь на gas_station, если кто-то может мне помочь с этим, было бы неплохо, кроме этого спасибо за помощь.