From 728be8c259b61b0e66d3ba5ade925cb88cbff7c4 Mon Sep 17 00:00:00 2001 From: Mark Thom Date: Mon, 13 Jan 2020 20:30:58 -0700 Subject: [PATCH] add simple gensym library --- src/prolog/lib/gensym.pl | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 src/prolog/lib/gensym.pl diff --git a/src/prolog/lib/gensym.pl b/src/prolog/lib/gensym.pl new file mode 100644 index 00000000..7b0f6cb5 --- /dev/null +++ b/src/prolog/lib/gensym.pl @@ -0,0 +1,29 @@ + +:- module(gensym, [gensym/2, + reset_gensym/1]). + +:- use_module(library(error)). +:- use_module(library(lists)). +:- use_module(library(non_iso)). +:- use_module(library(si)). + +append_id(Base, UniqueID, Unique) :- + atom_chars(Base, BaseChars), + number_chars(UniqueID, IDChars), + append(BaseChars, IDChars, AtomChars), + atom_chars(Unique, AtomChars). + +gensym(Base, Unique) :- + must_be(var, Unique), + atom_si(Base), + ( bb_get(Base, UniqueID0) -> + UniqueID is UniqueID0 + 1, + bb_put(Base, UniqueID), + append_id(Base, UniqueID, Unique) + ; bb_put(Base, 1), + append_id(Base, 1, Unique) + ). + +reset_gensym(Base) :- + atom_si(Base), + bb_put(Base, 0). -- 2.54.0