fork(1) download
  1. follows(bm,[ad]).
  2. follows(cp,[ad]).
  3. follows(ad,[cp]).
  4. follows(dd,[cp]).
  5. follows(ad,[ec]).
  6. follows(bm,[ec]).
  7. follows(cp,[ec]).
  8. follows(cp,[fa]).
  9. follows(dd,[fa]).
  10. follows(bm,[cp,dd]).
  11. follows(ec,[cp,dd]).
  12. follows(fa,[cp,dd]).
  13. follows(dd,[ad,bm]).
  14.  
  15. brings(X,S):-brings(X,S,[],[]).
  16.  
  17. brings(_X,[],_S,_N).
  18. brings(X,[X|L],S,N):-brings(X,L,[X|S],N).
  19. brings(X,[Y|L],S,N):-follows(Y,[X]),brings(X,L,[Y|S],N).
  20. brings(X,[Y|L],S,N):- \+member(Y,N),\+follows(Y,[X]),
  21. follows(Y,[A,B]),
  22. try_bring(X,A,L,S,[Y|N]),
  23. try_bring(X,B,L,S,[Y|N]),brings(X,L,[Y|S],N).
  24. brings(X,[Y|L],S,N):- \+member(Y,N),\+follows(Y,[X]),\+follows(Y,[_A,_B]),
  25. follows(Y,[C]),
  26. try_bring(X,C,L,S,[Y|N]),brings(X,L,[Y|S],N).
  27.  
  28. try_bring(_X,A,_L,S,_N):-member(A,S).
  29. try_bring(X,A,L,S,N):- \+member(A,S),sort([A|L],Y),brings(X,Y,S,N).
  30.  
  31. partymaker(X):-Guests=[ad,bm,cp,dd,ec,fa],member(X,Guests),brings(X,Guests).
Success #stdin #stdout 0.02s 68288KB
stdin
write('invited'),nl,
  partymaker(X),write(X),nl,
  fail.
stdout
GNU Prolog 1.3.1
By Daniel Diaz
Copyright (C) 1999-2009 Daniel Diaz
invited
ad
cp
cp
cp
cp
cp
cp
cp
cp
cp
cp
cp
cp
cp
cp
cp
cp
cp
cp
cp
cp
cp
cp
cp
cp
cp
cp
cp
cp
cp
cp
cp
cp
cp
cp
cp
cp
cp
cp
cp
cp
cp
cp
cp
cp
cp
cp
cp
cp
cp
cp
cp
cp
cp
cp
cp
cp
cp
cp
cp
cp
cp
cp
cp
cp
ec
ec
fa
fa
fa
fa
fa
fa
fa
fa
fa
fa
fa
fa
fa
fa
fa
fa
fa
fa
fa
fa
fa
fa
fa
fa
fa
fa
fa
fa
fa
fa
fa
fa
fa
fa
fa
fa
fa
fa
fa
fa
fa
fa
fa
fa
fa
fa
fa
fa
fa
fa
fa
fa
fa
fa
fa
fa
fa
fa
fa
fa
fa
fa
fa
fa
fa
fa
fa
fa
fa
fa
fa
fa
fa
fa
fa
fa
fa
fa
fa
fa
fa
fa
fa
fa
fa
fa
fa
fa
fa
fa
fa
fa
fa
fa
fa
fa
fa
fa
fa
fa
fa
fa
fa
fa
fa
fa
fa
fa
fa
fa
fa
fa
fa
fa
fa
fa
fa
fa
fa
fa
fa
fa
fa
fa
fa
fa
fa
fa

(5 ms) no