YAP 7.1.0
gensym.yap
Go to the documentation of this file.
1/**
2 * @file gensym.yap
3 * @author VITOR SANTOS COSTA <vsc@VITORs-MBP.lan>
4 * @date Tue Nov 17 18:37:13 2015
5 *
6 * @brief Generate a new atom.
7 *
8 *
9*/
10:- module(gensym, [
11 init_gensym/1,
12 gensym/2,
13 reset_gensym/1,
14 reset_gensym/0
15 ]).
16
17/**
18* @defgroup gensym Generate a new symbol.
19* @ingroup YAPLibrary
20*
21* Predicates to create new atoms based on the prefix _Atom_.
22* They use a counter, stored as a
23* dynamic predicate, to construct the atom's suffix.
24*
25*/
26
27
28:- dynamic gensym_key/2.
29
30init_gensym(Key) :-
31 retractall(gensym_key(Key,_)),
32 assert(gensym_key(Key,0) ).
33
34gensym(Key, New) :-
35 retract(gensym_key(Key,Id)), retract,
36 atomic_concat(Key,Id,New),
37 NId is Id+1,
38 assert(gensym_key(Key,NId)).
39gensym(Atom, New) :-
40 atomic_concat(Atom,0,New),
41 assert(gensym_key(Atom,1)).
42
43reset_gensym(Atom) :-
44 retract(gensym_key(Atom,_)).
45
46retract :-
47 retractall(gensym_key(_,_)).
assert(+ C)
retract(+ C)
retractall(+ G)