From 214daa5c4074a69aa07d6d32b1ce3053330c73d1 Mon Sep 17 00:00:00 2001 From: Vitor Santos Costa Date: Mon, 8 May 2017 19:04:16 +0100 Subject: [PATCH] swig --- packages/python/swig/yapi.yap | 46 +++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 packages/python/swig/yapi.yap diff --git a/packages/python/swig/yapi.yap b/packages/python/swig/yapi.yap new file mode 100644 index 000000000..e02cb5d3d --- /dev/null +++ b/packages/python/swig/yapi.yap @@ -0,0 +1,46 @@ + +%% @file yapi.yap +%% @brief support yap shell +%% +:- module(yapi, [bindvars/2]). + +:- use_module( library(maplist) ). +:- use_module( library(rbtrees) ). + +bindvars( [], [] ) :- !. +bindvars( L, NL ) :- + rb_new(T), + foldl2( bind, L, NL, T, _ , 0, _), + term_variables(NL, Vs), + foldl( bind_new, Vs, 0, _). + + +bind(X=Y, X=X, T0, T, N, N) :- + var(Y), + !, + rb_update(T0, Y, X, T). +bind(X = G, X = G, T, T, N0, N0) :- + ground(G), + !. +bind(X = C, X = NC, T, NT, N0, NF) :- + C =.. [N|L], + foldl2(newb, L, NL, T, NT, N0, NF), + NC =.. [N|NL]. + +newb(Y, X, T, T, N, N) :- + var(Y), + rb_lookup(Y, X, T), + !. +newb(Y, X, T, TN, N, NF) :- + var(Y), + !, + rb_insert(Y, T, X, TN), + NF is N+1, + atomic_concat('_',N,X). +newb(Y, Y, T, T, N, N) :- + ground(Y), + !. +newb(Y, X, T, NT, N0, NF) :- + Y =.. [N|L], + foldl2(newb, L, NL, T, NT, N0, NF), + X =.. [N|NL].