floors([floor(_,5),floor(_,4),floor(_,3),floor(_,2),floor(_,1)]).
building(Floors) :- floors(Floors),
        bmember(floor(baker, B), Floors), B \= 5, 
        bmember(floor(cooper, C), Floors), C \= 1,
        bmember(floor(fletcher, F), Floors), F \= 1, F \= 5,
        bmember(floor(miller, M), Floors), M > C,
        bmember(floor(smith, S), Floors), not(adjacent(S, F)),
        \+ adjacent(F, C) ,
        print_floors(Floors).

print_floors([A | B]) :- write(A), nl, print_floors(B).
print_floors([]).

bmember(X, [X | _]).
bmember(X, [_ | Y]) :- bmember(X, Y).

adjacent(X, Y) :- X =:= Y+1.
adjacent(X, Y) :- X =:= Y-1.

not(Goal) :- \+ call(Goal).
