2:- module(sdrt,[mergeSDRS/2]). 3
4:- use_module(library(lists),[member/2,append/3]). 5
6
10
11subordinate(elaboration).
12subordinate(instance).
13subordinate(topic).
14subordinate(explanation).
15subordinate(precondition).
16subordinate(commentary).
17subordinate(correction).
18
19
23
24coordinate(continuation).
25coordinate(narration).
26coordinate(background).
27coordinate(result).
28
29
33
34mergeSDRS(smerge(S1,S2,Rel,_Pops),S3):-
35 subordinate(Rel), !,
36 subDRS(S1,Rel,S2,S3).
37
38mergeSDRS(smerge(S1,S2,Rel,_Pops),S3):-
39 coordinate(Rel), !,
40 cooDRS(S1,Rel,S2,S3).
41
42
46
49subDRS(DRS,Rel,B2,SDRS):-
50 member(DRS,[_:drs(_,_),alfa(_,_,_),merge(_,_)]), !,
51 SDRS = sdrs([sub(lab(K1,DRS),lab(K2,B2))],[[]:rel(K1,K2,Rel)]).
52
55subDRS(sdrs([sub(L1,lab(L2,S1))],R),Rel,B,sdrs([sub(L1,lab(L2,S2))],R)):- !,
56 subDRS(S1,Rel,B,S2).
57
60subDRS(sdrs([lab(K1,B1)],R),Rel,B2,SDRS):- !,
61 SDRS = sdrs([sub(lab(K1,B1),lab(K2,B2))],[[]:rel(K1,K2,Rel)|R]).
62
65subDRS(sdrs([X|L1],R1),Rel,New,sdrs([X|L2],R2)):-
66 subDRS(sdrs(L1,R1),Rel,New,sdrs(L2,R2)).
67
68
72
75cooDRS(B1,Rel,B2,S):-
76 member(B1,[_:_,merge(_,_),alfa(_,_,_)]), !,
77 cooDRS(sdrs([lab(_,B1)],[]),Rel,B2,S).
78
79cooDRS(B1,Rel,B2,S):-
80 member(B2,[_:_,merge(_,_),alfa(_,_,_)]), !,
81 cooDRS(B1,Rel,sdrs([lab(_,B2)],[]),S).
82
85cooDRS(sdrs([lab(K1,B1)],R1),Rel,sdrs([lab(K2,B2)|L],R2),SDRS):- !,
86 append(R1,[[]:rel(K1,K2,Rel)|R2],R3),
87 SDRS = sdrs([lab(K1,B1),lab(K2,B2)|L],R3).
88
91cooDRS(sdrs([sub(B1,lab(K3,B3))],R),Rel,B2,sdrs([sub(B1,lab(K3,SDRS))],R)):- !,
92 cooDRS(B3,Rel,B2,SDRS).
93
96cooDRS(sdrs([sub(lab(K1,B1),B3)],R1),Rel,sdrs([lab(K2,B2)|L],R2),SDRS):- !,
97 append(R1,[[]:rel(K1,K2,Rel)|R2],R3),
98 SDRS = sdrs([sub(lab(K1,B1),B3),lab(K2,B2)|L],R3).
99
102cooDRS(sdrs([sub(lab(K1,B1),B3)],R1),Rel,sdrs([sub(lab(K2,B2),B4)|L],R2),SDRS):- !,
103 append(R1,[[]:rel(K1,K2,Rel)|R2],R3),
104 SDRS = sdrs([sub(lab(K1,B1),B3),sub(lab(K2,B2),B4)|L],R3).
105
108cooDRS(sdrs([lab(K1,B1)],R1),Rel,sdrs([sub(lab(K2,B2),B4)|L],R2),SDRS):- !,
109 append(R1,[[]:rel(K1,K2,Rel)|R2],R3),
110 SDRS = sdrs([lab(K1,B1),sub(lab(K2,B2),B4)|L],R3).
111
114cooDRS(sdrs([X|L1],R1),Rel,New,sdrs([X|L2],R2)):- !,
115 cooDRS(sdrs(L1,R1),Rel,New,sdrs(L2,R2))