Quintus’derived module systems have no means to separate the 
lookup module (for finding predicates) from the calling context (for 
qualifying meta arguments). Some other Prolog implementations (e.g., 
ECLiPSe and IF/Prolog) distinguish these operations, using @/2 
for setting the calling context of a goal. This is provided by 
SWI-Prolog, currently mainly to support compatibility layers.
For example, the code asserta(done)@world is the same as
asserta(world:done). Unlike in world:asserta(done),
asserta/1 
is resolved in the current module rather than the module
world. This makes no difference for system predicates, but 
usually does make a difference for user predicates.
Not that SWI-Prolog does not define @ as an operator. 
Some systems define this construct using op(900, xfx, @).