add prefixes to gensym keys
This commit is contained in:
@@ -1,4 +1,3 @@
|
||||
|
||||
:- module(gensym, [gensym/2,
|
||||
reset_gensym/1]).
|
||||
|
||||
@@ -7,6 +6,12 @@
|
||||
:- use_module(library(non_iso)).
|
||||
:- 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) :-
|
||||
atom_chars(Base, BaseChars),
|
||||
number_chars(UniqueID, IDChars),
|
||||
@@ -15,12 +20,13 @@ append_id(Base, UniqueID, Unique) :-
|
||||
|
||||
gensym(Base, Unique) :-
|
||||
must_be(var, Unique),
|
||||
atom_si(Base),
|
||||
( bb_get(Base, UniqueID0) ->
|
||||
atom_si(Base),
|
||||
gensym_key(Base, BaseKey),
|
||||
( bb_get(BaseKey, UniqueID0) ->
|
||||
UniqueID is UniqueID0 + 1,
|
||||
bb_put(Base, UniqueID),
|
||||
bb_put(BaseKey, UniqueID),
|
||||
append_id(Base, UniqueID, Unique)
|
||||
; bb_put(Base, 1),
|
||||
; bb_put(BaseKey, 1),
|
||||
append_id(Base, 1, Unique)
|
||||
).
|
||||
|
||||
|
||||
Reference in New Issue
Block a user