title: prolog printing out same answer for different parameters
body: <p>I am writing a Prolog program that solves a logic puzzle. When trying to print out the answers its gives me the same answers for all of them. The answers to the logic puzzle are:</p>
  
  <ul>
  <li>genevieve bought a size 4 manzarita</li>
  <li>lucia bought a size 7 Graffetz</li>
  <li>shawna bought a size 5 williford</li>
  <li>vanessa bought a size 6 Abbot Hill</li>
  </ul>
  
  <p>my code is the following:</p>
  
  <pre><code>customer(genevieve).
  customer(lucia).
  customer(shawna).
  customer(vanessa).
  
  shoesize(4).
  shoesize(5).
  shoesize(6).
  shoesize(7).
  
  manufactorer(abbothill).
  manufactorer(manzarita).
  manufactorer(graffetz).
  manufactorer(williford).
  
  solve :-
     shoesize(GenevieveShoesize),
     shoesize(LuciaShoesize),
     shoesize(ShawnaShoesize),
     shoesize(VanessaShoesize),
     all_different([GenevieveShoesize, LuciaShoesize, ShawnaShoesize,     VanessaShoesize]),
     manufactorer(AbbotHillManufactorer),
     manufactorer(ManzaritaManufactorer),
     manufactorer(GraffetzManufactorer),
     manufactorer(WillifordManufactorer),
  
     all_different([AbbotHillManufactorer, ManzaritaManufactorer, 
      GraffetzManufactorer, WillifordManufactorer]),
     List = [ [genevieve,GenevieveShoesize,AbbotHillManufactorer],
        [lucia,LuciaShoesize,ManzaritaManufactorer],
        [shawna,ShawnaShoesize,GraffetzManufactorer],
        [vanessa,VanessaShoesize,WillifordManufactorer]],
  
     \+(member([_,5,manzarita],List)),
     \+(member([_,6,manzarita],List)),
     \+(member([lucia,5,_],List)),
     \+(member([lucia,6,_],List)),
     \+(member([genevieve,_,abbothill],List)),
     \+(member([shawna,_,graffetz],List)),
     (member([vanessa,_,abbothill],List)),
  
     tell(genevieve,GenevieveShoesize,GeneieveManufactorer),
     tell(lucia,LuciaShoesize,LuciaManufactorer),
     tell(shawna,ShawnaShoesize,ShawnaManufactorer),
     tell(vanessa,VanessaShoesize,VanessaManufactorer).
  
  all_different([H | T]) :- member(H,T), !, fail.
  all_different([_ | T]) :- all_different(T).
  all_different([]).
  
  
  tell(X,Y,Z) :-
     customer(X),
     shoesize(Y),
     manufactorer(Z),
     write(X), write(' got their shoes from'),
     write(Y), write(' and is a size '), write(Z), nl.
  </code></pre>
  
  <p>When I go to SWI and ask it to:</p>
  
  <p>-tell(X,Y,Z)
  it outputs: 
  X equals genevieve,
  Y equals 4,
  Z equals abbot hill.</p>
  
  <p>and if I specify one of the variables for example
  tell(vanessa,Y,Z)
  it will print out : vanessa bought a size 4 abbot hill ; leaving the values of Y and Z the same.</p>