Chances are slight that Brian is a swan. It is highly likely that Julius is a rhino. There is a very good chance that Bernhard is a lion. There is a very good chance that if 'Bernhard is a lion and Julius is a rhino' then Antoine is hungry. There is almost no chance that if 'Brian is a swan and Julius is a rhino' then Mary grabbed the milk. We doubt that if either 'Brian is a swan' or 'Julius is a rhino' but not both then Greg is green.
It is impossible that either 'Mary grabbed the milk' or 'Antoine is hungry' but not both.
There is a better than even chance that either 'Mary grabbed the milk' or 'Antoine is hungry' but not both.
It is impossible that either 'Mary grabbed the milk' or 'Antoine is hungry' 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.
  0.9::factB.
  0.8::factC.
  %hop1
  0.8::factX:-and(factC,factB).
  0.02::factY:-and(factA,factB).
  0.2::factZ:-xor(factA,factB).

  %hop2
  conclusion:-xor(factY,factX).

  query(conclusion).
  
Either 'Mary grabbed the milk' or 'Antoine is hungry' but not both.