This repository has been archived on 2023-08-20. You can view files and clone it, but cannot push or open issues or pull requests.
yap-6.3/packages/CLPBN/clpbn/vmap.yap

41 lines
969 B
Prolog

:- module(clpbn_vmap,
[init_vmap/1, % init_vmap(-Vmap)
add_to_vmap/4, % add_to_vmap(+V,-I,+VMap0,VMapF)
get_from_vmap/3, % add_to_vmap(+V,-I,+VMap0)
vars_to_numbers/4, % vars_to_numbers(+Vs,-Is,+VMap0,VMapF)
lvars_to_numbers/4, % lvars_to_numbers(+LVs,-LIs,+VMap0,VMapF)
vmap_to_list/2
]).
:- use_module(library(rbtrees)).
:- use_module(library(maplist)).
%
% vmap: map V->I
% contiguous Vs to contiguous integers
%
init_vmap(vmap(0,Empty)) :-
rb_new(Empty).
get_from_vmap(V, I, VMap0) :-
VMap0 = vmap(_I,Map0),
rb_lookup(V, I, Map0).
add_to_vmap(V, I, VMap0, VMap0) :-
VMap0 = vmap(_I,Map0),
rb_lookup(V, I, Map0), !.
add_to_vmap(V, I0, vmap(I0,Map0), vmap(I, Map)) :-
I is I0+1,
rb_insert(Map0, V, I0, Map).
vars_to_numbers(Vs, Is, VMap0, VMap) :-
foldl(add_to_vmap, Vs, Is, VMap0, VMap).
lvars_to_numbers(LVs, LIs, VMap0, VMap) :-
foldl(vars_to_numbers, LVs, LIs, VMap0, VMap).
vmap_to_list(vmap(_,Map), L) :-
rb_visit(Map, L).