You're going to get a singleton error everywhere you have a single use variable. This appears to be your only use of variables, so I expect you get it a lot. Your code above is equivalent to:
sends(_,priscilla,C),
C#\=rose.
sends(carol,_,rose).
sends(dick,_,sun).
sends(_,_,landscape).
sends(bob,rhonda,_).
sends(edna,quincy,_).
sends(_,simon,deer).
sends(_,tina,_).
If it looks weird or wrong with singleton variables replaced with _
, it's a good indicator that you're missing logic. Do note that the arguments to sends/3
as you've written seem to be solely atomic, which makes this invocation especially queer:
sends(
[alice,bob,carol,dick,edna],
[priscilla,rhonda,quincy,simon,tina],
[rose,heart,sun,landscape,deer]).
There's no reason to expect Prolog to magically convert this use of sends/3
with lists into some other invocation with atoms. I have no idea what you're expecting to happen here.
These kinds of puzzles are very popular assignment problems for Prolog. Search the archives here--there have been several just in the last few days--and you should find some inspiration.