Chances are slight that Winona is a wolf. It is certain that Mary went to the office. We doubt that Daniel left the milk. There is almost no chance that if 'Daniel left the milk and Winona is a wolf' then Brian is green. Chances are about even that if 'Daniel left the milk' or 'Mary went to the office' or both then Julius is gray. It is highly likely that if 'Mary went to the office and Daniel left the milk' then Lily is a swan.
It is probably not the case that either 'Lily is a swan' or 'Winona is a wolf' but not both.
It is probably not the case that either 'Lily is a swan' or 'Winona is a wolf' but not both.
We believe that either 'Lily is a swan' or 'Winona is a wolf' but not both.

  and(A,B) :- A,B.
  or(A,B) :- A;B.
  nand(A,B) :- not(and(A,B)).
  nor(A,B) :- not(or(A,B)).
  xor(A,B) :- or(A,B), nand(A,B).

  %hop0
  0.1::factA.
  1.0::factB.
  0.2::factC.
  %hop1
  0.02::factX:-and(factC,factA).
  0.5::factY:-or(factC,factB).
  0.9::factZ:-and(factB,factC).

  %hop2
  conclusion:-xor(factZ,factA).

  query(conclusion).
  
Either 'Lily is a swan' or 'Winona is a wolf' but not both.