/* A solution to the zebra puzzle: https://en.wikipedia.org/wiki/Zebra_Puzzle */
/* The representation we use is: house(Color, Nationality, Pet, Drink, Smoke) */

zebra_puzzle(Houses) :-
    Houses = [house(_, norwegian, _, _, _),
              house(blue,_,_,_,_), house(_,_,_,milk,_), _, _],
    member(house(red, englishman, _, _, _), Houses),
    member(house(_, spaniard, dog, _, _), Houses),
    member(house(green, _, _, coffee, _), Houses),
    member(house(_, ukranian, _, tea, _), Houses),
    append(_HL, [house(ivory, _, _, _, _), house(green, _, _, _, _)|_HR], Houses),
    member(house(_, _, snails, _, old_gold), Houses),
    member(house(yellow, _, _, _, kools), Houses),
    next_to(house(_, _, _, _, chesterfields), house(_, _, fox, _, _), Houses),
    next_to(house(_, _, _, _, kools), house(_, _, horse, _, _), Houses),
    member(house(_, _, _, orange_juice, lucky_strike), Houses),
    member(house(_, japanese, _, _, parliaments), Houses).

next_to(H1, H2, Houses) :- append(_HL, [H1,H2|_HR], Houses).
next_to(H1, H2, Houses) :- append(_HL, [H2,H1|_HR], Houses).
