2:- module(relation,[resolve_relations/2]). 3
4:- use_module(library(lists),[member/2]). 5:- use_module(boxer(slashes)). 6:- use_module(knowledge(relations),[nn/3]). 7:- use_module(semlib(options),[option/2]). 8
9resolve_relations(X,Y):-
10 option('--nn',false), !, X=Y.
11
12resolve_relations(X,Y):-
13 rel(X,Y,[],Ts),
14 resolve(Ts).
15
16
17rel(X,Y,T,T):- var(X), !, X=Y.
18
19rel(X1,X2,T,[C1:C2|T]):-
20 C1 = [_,_,_,_,_],
21 X1 =.. [t|C1], !,
22 C2 = [_,_,_,_,_],
23 X2 =.. [t|C2].
24
25rel(X1,X2,T1,T2):-
26 X1 =.. [F|L1],
27 rels(L1,L2,T1,T2),
28 X2 =.. [F|L2].
29
30
31rels([],[],T,T).
32rels([X1|L1],[X2|L2],T1,T3):-
33 rel(X1,X2,T2,T3), rels(L1,L2,T1,T2).
34
35
36resolve([]).
37
38resolve([[C,W,S,A,I]:[C,W,S,A,I]|L]):- member(relation:_,A), !, resolve(L).
39
40resolve([C1:C2,N1:N2|L]):-
41 C1 = [n/n,W,S,A,I],
42 member(lemma:S1,A), member(pos:'NN',A),
43 N1 = [_,_,_,B,_],
44 member(lemma:S2,B), member(pos:'NN',B),
45 n_n(S1,S2,Rel), !,
46 C2 = [n/n,W,S,[relation:Rel|A],I],
47 resolve([N1:N2|L]).
48
49resolve([[n/n,W,S,A,I]:[n/n,W,S,[relation:of|A],I]|L]):- member(pos:'NN',A), !, resolve(L).
50resolve([[n/n,W,S,A,I]:[n/n,W,S,[relation:'='|A],I]|L]):- member(pos:'NNP',A), !, resolve(L).
51resolve([X:X|L]):- resolve(L).
52
53
65
66n_n(A,B,Sym):- nn(A,B,Sym), !.
67n_n(_,B,Sym):- nn(_,B,Sym), !.
68n_n(A,_,Sym):- nn(A,_,Sym), !