%%partofroom([[0,space],[1,space],[2,table],[3,seat],[4,space]],0,4,3,PartOfRoom). %%PartOfRoom=seat partofroom1(RoomParts,LowerBound,UpperBound,Position1,PartOfRoom1) :- %%LeftBound is Position1 - 1, %%RightBound is Position1 + 1, partofroom2(RoomParts,LowerBound,Position1,Position2,PartOfRoom2), partofroom3(RoomParts,UpperBound,Position1,Position3,PartOfRoom3), LeftInterval is Position1 - Position2, RightInterval is Position3 - Position1, min(LeftInterval,RightInterval,PartOfRoom2,PartOfRoom3,PartOfRoom1). partofroom2(_RoomParts,LowerBound,LowerBound,LowerBound,space). partofroom2(RoomParts,LowerBound,Position1,Position2,PartOfRoom) :- member(RoomPart,RoomParts), RoomPart = [Position1, space], Position3 is Position1 - 1, partofroom2(RoomParts,LowerBound,Position3,Position2,PartOfRoom). partofroom(RoomParts,LowerBound,Position1,Position2,PartOfRoom) :- member(RoomPart,RoomParts), RoomPart = [Position1, PartOfRoom], min(LeftInterval,RightInterval,PartOfRoom1,_PartOfRoom2,PartOfRoom1) :- LeftInterval =< RightInterval. min(LeftInterval,RightInterval,_PartOfRoom1,PartOfRoom2,PartOfRoom2) :- LeftInterval > RightInterval.