Advertisement
Guest User

Untitled

a guest
Jul 30th, 2018
130
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.99 KB | None | 0 0
  1. $ cat domino.pl
  2. :- use_module(library(lists), [select/3]).
  3.  
  4. stone(2,2).
  5. stone(4,6).
  6. stone(1,2).
  7. stone(2,4).
  8. stone(6,2).
  9.  
  10. domino(Chain) :-
  11. findall(stone(X,Y),stone(X,Y),[FirstStone|RestStones]),
  12. Chain = [FirstStone|RestChain],
  13. init_freesides(FirstStone,FreeSides),
  14. once(chain(FreeSides,RestStones,RestChain)).
  15.  
  16. init_freesides(stone(A,A),FreeSides) :- !, FreeSides = [A,A,A].
  17. init_freesides(stone(A,B),FreeSides) :- FreeSides = [A,B].
  18.  
  19. chain( _, [], []).
  20. chain(FreeSides,Stones,[Stone|Chain]) :-
  21. select(Stone,Stones,RestStones),
  22. add_stone(Stone,FreeSides,RestStones,Chain).
  23.  
  24. add_stone(stone(A,A),FreeSides,RestStones,Chain) :- !,
  25. once(select(A,FreeSides,RestFreeSides)),
  26. chain([A,A|RestFreeSides],RestStones,Chain).
  27. add_stone(stone(A,B),FreeSides,RestStones,Chain) :-
  28. (
  29. once(select(A,FreeSides,RestFreeSides)),
  30. chain([B|RestFreeSides],RestStones,Chain)
  31. ;
  32. once(select(B,FreeSides,RestFreeSides)),
  33. chain([A|RestFreeSides],RestStones,Chain)
  34. ).
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement