select([A|As],S):- select(A,S,S1),select(As,S1).
select([],_).
dinesmans(X) :-
%% Baker, Cooper, Fletcher, Miller, and Smith live on different floors
%% of an apartment house that contains only five floors.
select([Baker,Cooper,Fletcher,Miller,Smith],[1,2,3,4,5]),
%% Baker does not live on the top floor.
Baker =\= 5,
%% Cooper does not live on the bottom floor.
Cooper =\= 1,
%% Fletcher does not live on either the top or the bottom floor.
Fletcher =\= 1, Fletcher =\= 5,
%% Miller lives on a higher floor than does Cooper.
Miller > Cooper,
%% Smith does not live on a floor adjacent to Fletcher's.
1 =\
= abs(Smith
- Fletcher
),
%% Fletcher does not live on a floor adjacent to Cooper's.
1 =\
= abs(Fletcher
- Cooper
),
%% Where does everyone live?
X = ['Baker'(Baker), 'Cooper'(Cooper), 'Fletcher'(Fletcher),
'Miller'(Miller), 'Smith'(Smith)].
main
:- bagof( X
, dinesmans
(X
), L
) -> maplist
( writeln
, L
), nl, write('No more solutions.') ; write('No solutions.').
c2VsZWN0KFtBfEFzXSxTKTotIHNlbGVjdChBLFMsUzEpLHNlbGVjdChBcyxTMSkuCnNlbGVjdChbXSxfKS4gCgpkaW5lc21hbnMoWCkgOi0KICAgICUlIEJha2VyLCBDb29wZXIsIEZsZXRjaGVyLCBNaWxsZXIsIGFuZCBTbWl0aCBsaXZlIG9uIGRpZmZlcmVudCBmbG9vcnMgCiAgICAlJSBvZiBhbiBhcGFydG1lbnQgaG91c2UgdGhhdCBjb250YWlucyBvbmx5IGZpdmUgZmxvb3JzLiAKICAgIHNlbGVjdChbQmFrZXIsQ29vcGVyLEZsZXRjaGVyLE1pbGxlcixTbWl0aF0sWzEsMiwzLDQsNV0pLAoKICAgICUlIEJha2VyIGRvZXMgbm90IGxpdmUgb24gdGhlIHRvcCBmbG9vci4gCiAgICBCYWtlciA9XD0gNSwKCiAgICAlJSBDb29wZXIgZG9lcyBub3QgbGl2ZSBvbiB0aGUgYm90dG9tIGZsb29yLgogICAgQ29vcGVyID1cPSAxLAoKICAgICUlIEZsZXRjaGVyIGRvZXMgbm90IGxpdmUgb24gZWl0aGVyIHRoZSB0b3Agb3IgdGhlIGJvdHRvbSBmbG9vci4KICAgIEZsZXRjaGVyID1cPSAxLCBGbGV0Y2hlciA9XD0gNSwKCiAgICAlJSBNaWxsZXIgbGl2ZXMgb24gYSBoaWdoZXIgZmxvb3IgdGhhbiBkb2VzIENvb3Blci4gCiAgICBNaWxsZXIgPiBDb29wZXIsCgogICAgJSUgU21pdGggZG9lcyBub3QgbGl2ZSBvbiBhIGZsb29yIGFkamFjZW50IHRvIEZsZXRjaGVyJ3MuCiAgICAxID1cPSBhYnMoU21pdGggLSBGbGV0Y2hlciksCgogICAgJSUgRmxldGNoZXIgZG9lcyBub3QgbGl2ZSBvbiBhIGZsb29yIGFkamFjZW50IHRvIENvb3BlcidzLgogICAgMSA9XD0gYWJzKEZsZXRjaGVyIC0gQ29vcGVyKSwKCiAgICAlJSBXaGVyZSBkb2VzIGV2ZXJ5b25lIGxpdmU/CiAgICBYID0gWydCYWtlcicoQmFrZXIpLCAnQ29vcGVyJyhDb29wZXIpLCAnRmxldGNoZXInKEZsZXRjaGVyKSwgCiAgICAgICAgICdNaWxsZXInKE1pbGxlciksICdTbWl0aCcoU21pdGgpXS4KCm1haW4gOi0gIGJhZ29mKCBYLCBkaW5lc21hbnMoWCksIEwgKSAKICAgICAgICAgLT4gbWFwbGlzdCggd3JpdGVsbiwgTCksIG5sLCB3cml0ZSgnTm8gbW9yZSBzb2x1dGlvbnMuJykgCiAgICAgICAgIDsgIHdyaXRlKCdObyBzb2x1dGlvbnMuJyku