45 lines
996 B
Plaintext
45 lines
996 B
Plaintext
|
|
||
|
:- 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).
|
||
|
|
||
|
|
||
|
|
||
|
|