Ужасный ужас пролога возвращается слишком быстро.
wayopen(Room1,Room2) :- doorstate(Room1, Room2, opened).
wayopen(Room1,Room2) :- doorstate(Room1, RoomX, opened), wayopen(RoomX,Room2).
Так что я не просто делаю твою домашнюю работу для тебя, вот как это понять:
- Путь открыт между двумя комнатами, если они соединены дверью и дверь открыта.
- Путь открыт между двумя комнатами, если на первом пути дверь открыта в другую комнату, и есть путь из другой комнаты во вторую комнату.
Обратите внимание, что эти правила могут проходить через двери только в одном направлении. Ваша домашняя работа - заставить ее работать в обоих направлениях.
Куда мы можем попасть из зала?
?- wayopen(hall, X).
X = diningroom ;
X = kitchen ;
X = office ;
X = cellar ;
false.
Вот все комнаты, из которых вы можете получить:
?- wayopen(Room1,Room2).
Room1 = hall,
Room2 = diningroom ;
Room1 = diningroom,
Room2 = kitchen ;
Room1 = kitchen,
Room2 = office ;
Room1 = kitchen,
Room2 = cellar ;
Room1 = hall,
Room2 = kitchen ;
Room1 = hall,
Room2 = office ;
Room1 = hall,
Room2 = cellar ;
Room1 = diningroom,
Room2 = office ;
Room1 = diningroom,
Room2 = cellar ;
false.