bb_put( PrvKey, New ) :- to_swi_nb_key_value( PrvKey, Key ), ( ground(New) -> Type = g; Type = ng ), nb_setval( Key, Type/New ). bb_get( PrvKey, Current ) :- to_swi_nb_key_value( PrvKey, Key ), nb_current( Key, Type/NbCurrent ), ( Type == g -> Current = NbCurrent ; copy_term( NbCurrent, Current ) ). bb_delete( PrvKey, Value ) :- to_swi_nb_key_value( PrvKey, Key ), nb_current( Key, _Type/Value ), nb_delete( Key ). to_swi_nb_key_value( PrvKey, Key ) :- ( atom(PrvKey) -> Key = PrvKey ; ( number(PrvKey) -> atom_number( Key, PrvKey ) ; term_to_atom( PrvKey, Key ) ) ). file_exists( File ) :- exists_file( File ). variant( A, B ) :- A =@= B. remove_duplicates( List1, List2 ) :- list_to_set( List1, List2 ). host_name( Host ) :- ( getenv( 'HOSTNAME', Host ) -> true ; ( getenv( 'HOST', Host ) -> true ; Host = localhost ) ). datime( datime(Yr,Mo,Da,Hr,Mi,Se) ) :- get_time( Time ), convert_time( Time, Yr, Mo, Da, Hr, Mi, Se, _ ). nth( A, B, C ) :- nth1( A, B, C ). environ( Name, Value ) :- (var(Value) -> getenv( Name, Value ) ; setenv( Name, Value ) ).