, , and

The combine-rules for and work exactly like the rule (see Section ``''). Again, their function is simply to introduce an application:

combine(v1:V,[tv:TV,np2:NP]) :-
        TV = usr([TVRoot|_],_,_,_),
        NP = usr([NPRoot|_],_,_,_),
        NewUsr = usr([Root],[Root:(TVRoot@NPRoot)],[],[]),
        mergeUSR(merge(NewUsr,merge(TV,NP)),V).

combine(pp:PP,[prep:Prep,np2:NP]) :-
        Prep = usr([PrepRoot|_],_,_,_),
        NP = usr([NPRoot|_],_,_,_),
        NewUsr = usr([Root],[Root:(PrepRoot@NPRoot)],[],[]),
        mergeUSR(merge(NewUsr,merge(Prep,NP)),PP).

Finally, here is the rule that combines a and a to form an (think of phrases like ``therapist with a siamese cat''):

combine(n1:N,[noun:Noun,pp:PP]) :-
        Noun = usr([NounRoot|_],_,_,_),
        PP = usr([PPRoot|_],_,_,_),
        NewUsr = usr(
        [Root,N1,N2,N3,N4,N5,N6],
        [Root:lambda(N1),N1:(N2 & N3),N2:(NounRoot@N4),N4:var,N5:(PPRoot@N6),N6:var],
        [dom(N3,N5)],
        [bind(N4,Root),bind(N6,Root)]),
        mergeUSR(merge(NewUsr,merge(Noun,PP)),N).

?- Question!

Can you see what this rule does? Compare it to the local macros for the determiners (see Section ``Macros for the Determiners'')!


Aljoscha Burchardt, Alexander Koller and Stephan Walter
Version 1.2.5 (20030212)