25 lines
408 B
Plaintext
25 lines
408 B
Plaintext
|
:- module(gensym, [
|
||
|
gensym/2,
|
||
|
reset_gensym/1,
|
||
|
reset_gensym/0
|
||
|
]).
|
||
|
|
||
|
:- dynamic gensym_key/2.
|
||
|
|
||
|
gensym(Atom, New) :-
|
||
|
retract(gensym_key(Atom,Id)), !,
|
||
|
atomic_concat(Atom,Id,New),
|
||
|
NId is Id+1,
|
||
|
assert(gensym_key(Atom,NId)).
|
||
|
gensym(Atom, New) :-
|
||
|
atomic_concat(Atom,1,New),
|
||
|
assert(gensym_key(Atom,2)).
|
||
|
|
||
|
reset_gensym(Atom) :-
|
||
|
retract(gensym_key(Atom,_)).
|
||
|
|
||
|
reset_gensym :-
|
||
|
retractall(gensym_key(_,_)).
|
||
|
|
||
|
|