semantic.pl
1.01 KB
% == No, Emacs this is -*-Prolog-*- code, not what you thought... =============
sa_names(fzn(preds(IP), vars(IV), constrs(IC), SOLVE),
fzn(preds(OP), vars(OV), constrs(OC), SOLVE, ST)) :-
sa_n_traverse(IP, OP, [], ST1), % predicates
sa_n_traverse(IV, OV, ST1, ST2), % variables
sa_n_traverse(IC, OC, ST2, ST). % constraints
% -----------------------------------------------------------------------------
sa_n_traverse([], [], ST, ST).
sa_n_traverse([N|Ns], [NN|NNs], IST, OST) :-
sa_n(N, NN, IST, MST),
sa_n_traverse(Ns, NNs, MST, OST).
% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
%
% sa_n(AST_N_IN, AST_N_OUT, ST_IN, ST_OUT)
sa_n(var(N,T,I,A), var(N,T), IST, OST) :-
sa_attribs(A, AX, IST, ST1),
st_insert(ST1, N, var(N,T,I,AX), OST).
sa_n(constraint(_C)).
% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
sa_attribs(A, NA, IST, OST) :-
true.
% -----------------------------------------------------------------------------