1 % (c) 2009 Lehrstuhl fuer Softwaretechnik und Programmiersprachen,
2 % Heinrich Heine Universitaet Duesseldorf
3 % This software is licenced under EPL 1.0 (http://www.eclipse.org/org/documents/epl-v10.html)
4
5 :- module(zparameters,[insert_parameter/4]).
6
7 :- use_module(library(lists)).
8
9 :- use_module(probsrc(tools)).
10
11 :- use_module(subexpressions).
12
13 :- use_module(probsrc(module_information)).
14 :- module_info(group,proz).
15 :- module_info(description,'This module provides functionality to replace a Z schema\'s parameter by expressions').
16
17 %********************************************************************************
18 % insert_parameter
19 insert_parameter(Exprs,[],[],Exprs) :- !.
20 insert_parameter(Exprs,Params,Values,Result) :- insert_parameter2(Exprs,Params,Values,Result).
21
22 insert_parameter2([],_,_,[]) :- !.
23 insert_parameter2([E|ERest],Params,Values,[P|PRest]) :-
24 !,insert_parameter2(E,Params,Values,P),
25 insert_parameter2(ERest,Params,Values,PRest).
26 insert_parameter2(ref(Name,P),Params,Values,ref(Value,P)) :-
27 !,
28 ( nth0(N,Params,Name) ->
29 nth0(N,Values,Value)
30 ; otherwise ->
31 Value = Name).
32 insert_parameter2(Expr,Params,Values,Result) :-
33 znamespace(Expr,Outer,Inner,Names,NOuter,NInner,Result),
34 !,
35 insert_parameter2(Outer,Params,Values,NOuter),
36 remove_params(Params,Values,Names,NParams,NValues),
37 insert_parameter(Inner,NParams,NValues,NInner).
38 insert_parameter2(Expr,Params,Values,Result) :-
39 zexpr_conversion(Expr,Subs,PSubs,Result),
40 insert_parameter2(Subs,Params,Values,PSubs).
41
42 remove_params([],[],_,[],[]).
43 remove_params([P|PRest],[V|VRest],Names,Params,Values) :-
44 (member(P,Names) ->
45 (Params = OParams, Values = OValues);
46 (Params = [P|OParams], Values = [V|OValues])),
47 remove_params(PRest,VRest,Names,OParams,OValues).