It is probably not the case that Sandra left the milk. It is unlikely that Mary moved to the office. It is probably the case that Julius is a frog. We doubt that if 'Julius is a frog' or 'Mary moved to the office' or both then Bernhard is gray. Chances are slight that if 'Sandra left the milk' or 'Mary moved to the office' or both then John went to the hallway. It is likely that if 'Mary moved to the office and Julius is a frog' then Daniel got the apple.
It is probable that either 'Bernhard is gray' or 'John went to the hallway' but not both.
We doubt that either 'Bernhard is gray' or 'John went to the hallway' but not both.
It is probable that either 'Bernhard is gray' or 'John went to the hallway' 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.25::factA.
  0.2::factB.
  0.7::factC.
  %hop1
  0.2::factX:-or(factC,factB).
  0.1::factY:-or(factA,factB).
  0.7::factZ:-and(factB,factC).

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

  query(conclusion).
  
Either 'Bernhard is gray' or 'John went to the hallway' but not both.