%% roompart1([[0, space], [1, space], [2, table], [3, seat], [4, space]], 0, 4, 3, RoomPart). %% RoomPart =seat roompart1(RoomParts, LowerBound, UpperBound, Position1, RoomPart1) :- roompart2(RoomParts, LowerBound, Position1, -, Position2, RoomPart2), roompart2(RoomParts, UpperBound, Position1, +, Position3, RoomPart3), LeftInterval is Position1 - Position2, RightInterval is Position3 - Position1, obormin(LeftInterval, RightInterval, RoomPart2, RoomPart3, RoomPart1). roompart2(_RoomParts, Bound, Bound, _Sign, Bound, space) :- !. roompart2(RoomParts, Bound, Position1, Sign, Position2, RoomPart1) :- member(RoomPart2, RoomParts), RoomPart2 = [Position1, space], operate(Position1, Sign, Position3), roompart2(RoomParts, Bound, Position3, Sign, Position2, RoomPart1), !. roompart2(RoomParts, _Bound, Position1, _Sign, Position1, RoomPart1) :- member(RoomPart2, RoomParts), RoomPart2 = [Position1, RoomPart1]. operate(Position1, -, Position2) :- Position2 is Position1 - 1. operate(Position1, +, Position2) :- Position2 is Position1 + 1. obormin(_LeftInterval, _RightInterval, space, space, space) :- !. obormin(_LeftInterval, _RightInterval, space, RoomPart, RoomPart) :- !. obormin(_LeftInterval, _RightInterval, RoomPart, space, RoomPart) :- !. obormin(LeftInterval, RightInterval, RoomPart1, _RoomPart2, RoomPart1) :- LeftInterval =< RightInterval. obormin(LeftInterval, RightInterval, _RoomPart1, RoomPart2, RoomPart2) :- LeftInterval > RightInterval.