14
31
32
33list_to_conjonction( [],true ).
34list_to_conjonction( [T|Q],','(T,Conj) ) :-
35 list_to_conjonction( Q,Conj ).
36
38start :-
39 exec( "modal",[modal_in,modal_out],_ ),
40 read_string( modal_out,">",_,_ ),
41 printf( modal_in,"Eclipse\n%b",[] ),
43 read_string( modal_out," ",_,_ ).
44
45
46:- start. 47
48stop:-
49 printf(modal_in,"quit\n%b",[]).
50
51normalize_unify_a1(Pred,Pred1) :-
52 normalize_ass(Pred,Pred0),
53 normalize_ass(Pred1,Pred10),
54 unify_a1(Pred0,Pred10).
55
56
57
59upp_unify( T1,T2,L_variables,Unifier ) :-
60 term_variables( T1+T2,L_variables ),
61 printf( modal_in,"unif\n%QODVw\n%QODV.w\n%QODV.w\n%b",
62 [L_variables,T1,T2] ),
63 read( modal_out,L_variables-L_l_unifiers ),
64 member( Unifier,L_l_unifiers ).
65
67upp_unify( T1,T2,Unifier_list ) :-
68 upp_unify( T1,T2,_,Unifier ),
69 conjunction_to_list( Unifier,Unifier_list ).
70
71unify_a1( T1,T2 ) :-
72 upp_unify( T1,T2,_,Unifier ),
73 call( Unifier ).
81:- set_flag(occur_check,on). 91
92normalize_ass(Var,Var2) :-
93 var(Var),
94 !,
95 Var = Var2.
96normalize_ass(Atom,Atom2) :-
97 atomic(Atom),
98 !,
99 Atom = Atom2.
100normalize_ass(+(A1,Arg),
101 NormalArg) :-
102 A1 == 0,
103 !,
104 normalize_ass(Arg,NormalArg).
105normalize_ass(+(Arg,A2),
106 NormalArg) :-
107 A2 == 0,
108 !,
109 normalize_ass(Arg,NormalArg).
110normalize_ass(+(A1,C),
111 Normal) :-
112 nonvar(A1),
113 A1 = +(A,B),
114 !,
115 normalize_ass(+(A,
116 +(B,C)),
117 Normal).
118normalize_ass(+(A,B),
119 +(NormalA,NormalB)) :-
120 !,
121 normalize_ass(A,NormalA),
122 normalize_ass(B,NormalB).
123normalize_ass(Term,NormalTerm) :-
124 Term =.. [F|Args],
125 normalize_ass_list(Args,NormalArgs),
126 NormalTerm =.. [F|NormalArgs].
127
128normalize_ass_list([],[]).
129normalize_ass_list([H|T],[NormalH|NormalT]) :-
130 !,
131 normalize_ass(H,NormalH),
132 normalize_ass_list(T,NormalT).
133
134analyse([],[]).
135analyse([_+I|Rest],[I|Indices]) :-
136 analyse(Rest,Indices).
137