From: Mark Thom Date: Tue, 14 Jan 2020 03:30:58 +0000 (-0700) Subject: add simple gensym library X-Git-Tag: v0.8.118~26 X-Git-Url: https://git.sagredo.dev/?a=commitdiff_plain;h=728be8c259b61b0e66d3ba5ade925cb88cbff7c4;p=scryer-prolog.git add simple gensym library --- 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).