add prefixes to gensym keys
This commit is contained in:
@@ -1,4 +1,3 @@
|
|||||||
|
|
||||||
:- module(gensym, [gensym/2,
|
:- module(gensym, [gensym/2,
|
||||||
reset_gensym/1]).
|
reset_gensym/1]).
|
||||||
|
|
||||||
@@ -7,6 +6,12 @@
|
|||||||
:- use_module(library(non_iso)).
|
:- use_module(library(non_iso)).
|
||||||
:- use_module(library(si)).
|
:- use_module(library(si)).
|
||||||
|
|
||||||
|
gensym_key(Base, BaseKey) :-
|
||||||
|
atom_chars('gensym_', PrefixChars),
|
||||||
|
atom_chars(Base, BaseChars),
|
||||||
|
append(PrefixChars, BaseChars, BaseKeyChars),
|
||||||
|
atom_chars(BaseKey, BaseKeyChars).
|
||||||
|
|
||||||
append_id(Base, UniqueID, Unique) :-
|
append_id(Base, UniqueID, Unique) :-
|
||||||
atom_chars(Base, BaseChars),
|
atom_chars(Base, BaseChars),
|
||||||
number_chars(UniqueID, IDChars),
|
number_chars(UniqueID, IDChars),
|
||||||
@@ -16,11 +21,12 @@ append_id(Base, UniqueID, Unique) :-
|
|||||||
gensym(Base, Unique) :-
|
gensym(Base, Unique) :-
|
||||||
must_be(var, Unique),
|
must_be(var, Unique),
|
||||||
atom_si(Base),
|
atom_si(Base),
|
||||||
( bb_get(Base, UniqueID0) ->
|
gensym_key(Base, BaseKey),
|
||||||
|
( bb_get(BaseKey, UniqueID0) ->
|
||||||
UniqueID is UniqueID0 + 1,
|
UniqueID is UniqueID0 + 1,
|
||||||
bb_put(Base, UniqueID),
|
bb_put(BaseKey, UniqueID),
|
||||||
append_id(Base, UniqueID, Unique)
|
append_id(Base, UniqueID, Unique)
|
||||||
; bb_put(Base, 1),
|
; bb_put(BaseKey, 1),
|
||||||
append_id(Base, 1, Unique)
|
append_id(Base, 1, Unique)
|
||||||
).
|
).
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user