:- dynamic pl/1. pl :- ( current_op( 900, fy, nospy) -> % sicstus (3.8) % current_op( _, _, sequential) % sicstus (3.7) retractall( pl(_OldP) ), prolog_flag(version,Ver), assert( pl(sicstus(Ver)) ) ; ( current_op( _P, _A, '#=' ) -> % eclipse (4.2) getcwd(Cwd), assert( prolog_load_context(directory,Cwd) ), assert( wh_prolog(eclipse(ver)) ), retract_all( pl(_OldP) ), get_flag( version, Ver ), assert( pl(eclipse(Ver)) ) ; ( current_op( _P, _A, module_transparent ) -> % swi (3.3) current_prolog_flag( version, Ver ), retractall( pl(_OldP) ), assert( pl(swi(Ver)) ) ; ( current_op(_P,_A,same) -> retractall( pl(_OldP) ), use_module( library(lists) ), current_prolog_flag( version, YapVer ), atom_concat( 'Yap-', Rgt, YapVer ), atom_codes( Rgt, RgtCs ), append( MjCs, [0'.|SrtCs], RgtCs ), append( MnCs, [0'.|FxCs], SrtCs ), number_codes( Mj, MjCs ), number_codes( Mn, MnCs ), number_codes( Fx, FxCs ), assert( pl(yap(Mj:Mn:Fx)) ) ; true ) ) ) ). on_pl( Prolog, Guarded ) :- ( pl( Prolog ) -> call( Guarded ) ; true ). :- pl.