View difference between Paste ID: Mg7YtENY and Bxvu1xSB
SHOW: | | - or go back to the newest paste.
1-
% assume member_/2 is defined
1+
2
3
memb_or_call(L,{E}):-!,E.
4
memb_or_call(L,E):-member(E,L).
5
6
solve(Neighborhood) :-
7
8
  /*
9
  the solution consists of five compounds
10
  each compound consists of the six traits of a house, in order
11
12
  position    = 1, 2, 3, 4, 5
13
  nationality = brit, dane, german, norwegian, swede
14
  colors      = blue, green, red, white, yellow
15
  beverages   = beer, coffee, milk, tea, water
16
  smokes      = bluemaster, dunhill, pallmall, prince, blend
17
  keeps       = cat, bird, dog, fish, horse
18
  */
19
20
  % the neighborhood looks like this
21
  Neighborhood = [
22
    (1,_,_,_,_,_),
23
    (2,_,_,_,_,_),
24
    (3,_,_,_,_,_),
25-
 maplist(lists:member_(Neighborhood),[
25+
26
    (5,_,_,_,_,_)],
27
28
 maplist(memb_or_call(Neighborhood),[
29
  % 1.  The Brit lives in a red house.
30
   (_,brit,red,_,_,_),
31
32
  % 2.  The Swede keeps dogs as pets.
33
   (_,swede,_,_,_,dog),
34
35
  % 3.  The Dane drinks tea.
36
   (_,dane,_,tea,_,_),
37
38
  % 4.  The green house is on the left of the white house (next to it).
39
   (A,_,green,_,_), B is A+1,
40
   (B,_,white,_,_),
41
42
  % 5.  The green house owner drinks coffee.
43
   (_,_,green,coffee,_,_),
44
45
  % 6.  The person who smokes Pall Mall rears birds.
46
   (_,_,_,_,pallmall,birds),
47
48
  % 7.  The owner of the yellow house smokes Dunhill.
49
   (_,_,yellow,_,dunhill,_),
50
51
  % 8.  The man living in the house right in the center drinks milk.
52
   (3,_,_,milk,_,_),
53
54
  % 9.  The Norwegian lives in the first house.
55-
   (C,_,_,_,blend,_), plus_or_minus_one(C, D),
55+
56
57
  % 10. The man who smokes blend lives next to the one who keeps cats.
58
   (C,_,_,_,blend,_), {plus_or_minus_one(C, D)},
59-
   (E,_,_,_,_,horses), plus_or_minus_one(E, F),
59+
60
61
  % 11. The man who keeps horses lives next to the man who smokes Dunhill.
62
   (E,_,_,_,_,horses), {plus_or_minus_one(E, F)},
63
   (F,_,_,_,dunhill,_),
64
65
  % 12. The owner who smokes Blue Master drinks beer.
66
   (_,_,_,beer,bluemaster,_),
67
68
  % 13. The German smokes Prince.
69-
   (G,norwegian,_,_,_,_), plus_or_minus_one(G, H),
69+
70
71
  % 14. The Norwegian lives next to the blue house.
72
   (G,norwegian,_,_,_,_), {plus_or_minus_one(G, H)},
73
   (H,_,blue,_,_,_),
74
75
  % 15. The man who smokes blend has a neighbor who drinks water.
76
   (I,_,_,_,blend,_), plus_or_minus_one(I, J),
77
   (J,_,_,water,_,_),
78
79
  % Question: Who owns the fish?
80
   (_,_,_,_,_,fish)]).
81
82
% This is probably very very very bad practice
83
plus_or_minus_one(I, J) :- Im is I-1, Ip is I+1, member(J, [Im, Ip]).
84
85
main :- solve(Neighborhood), maplist(writeln, Neighborhood).