Files
gf-core/lib/src/api/Combinators.gf
2009-06-22 15:39:08 +00:00

188 lines
6.0 KiB
Plaintext

--1 Combinators: a High-Level Syntax API
-- This module defines some "grammatical functions" that give shortcuts to
-- typical constructions. [``Constructors`` Constructors.html] and the
-- language-specific ``Paradigms`` modules are usually needed
-- to construct arguments of these functions.
incomplete resource Combinators = open Cat, Structural, Constructors in {
oper
--2 Predication
pred : overload {
pred : V -> NP -> Cl ; -- x converges
pred : V2 -> NP -> NP -> Cl ; -- x intersects y
pred : V3 -> NP -> NP -> NP -> Cl ; -- x intersects y at z
pred : V -> NP -> NP -> Cl ; -- x and y intersect
pred : A -> NP -> Cl ; -- x is even
pred : A2 -> NP -> NP -> Cl ; -- x is divisible by y
pred : A -> NP -> NP -> Cl ; -- x and y are equal
pred : N -> NP -> Cl ; -- x is a maximum
pred : CN -> NP -> Cl ; -- x is a local maximum
pred : NP -> NP -> Cl ; -- x is the neutral element
pred : N -> NP -> NP -> Cl ; -- x and y are inverses
pred : Adv -> NP -> Cl ; -- x is in scope
pred : Prep -> NP -> NP -> Cl -- x is outside y
} ;
--2 Function application
app : overload {
app : N -> NP ;
app : N2 -> NP -> NP ;
app : N3 -> NP -> NP -> NP ;
app : N2 -> NP -> NP -> NP ;
app : N2 -> N -> CN ;
app : N2 -> NP -> CN ; -- divisor of x
app : N3 -> NP -> NP -> CN ; -- path from x to y
app : N2 -> NP -> NP -> CN ; -- path between x and y
} ;
--2 Coordination
coord : overload {
coord : Conj -> Adv -> Adv -> Adv ;
coord : Conj -> AP -> AP -> AP ;
coord : Conj -> NP -> NP -> NP ;
coord : Conj -> S -> S -> S ;
coord : Conj -> ListAdv -> Adv ;
coord : Conj -> ListAP -> AP ;
coord : Conj -> ListNP -> NP ;
coord : Conj -> ListS -> S ;
} ;
--2 Modification
mod : overload {
mod : A -> N -> CN ;
mod : AP -> CN -> CN ;
mod : AdA -> A -> AP ;
mod : Det -> N -> NP ;
mod : Det -> CN -> NP ;
mod : Quant -> N -> NP ;
mod : Quant -> CN -> NP ;
mod : Predet -> N -> NP ;
mod : Numeral -> N -> NP
} ;
--2 Negation
neg : overload {
neg : Imp -> Utt ;
neg : Cl -> S ;
neg : QCl -> QS ;
neg : RCl -> RS
};
--.
pred = overload {
pred : V -> NP -> Cl
= \v,np -> mkCl np v ;
pred : V2 -> NP -> NP -> Cl
= \v,np,ob -> mkCl np v ob ;
pred : V3 -> NP -> NP -> NP -> Cl
= \v,np,ob,ob2 -> mkCl np v ob ob2 ;
pred : V -> NP -> NP -> Cl --# notminimal
= \v,x,y -> mkCl (mkNP and_Conj x y) v ; --# notminimal
pred : A -> NP -> Cl
= \a,np -> mkCl np a ;
pred : A2 -> NP -> NP -> Cl --# notminimal
= \a,x,y -> mkCl x a y ; --# notminimal
pred : A -> NP -> NP -> Cl --# notminimal
= \a,x,y -> mkCl (mkNP and_Conj x y) a ; --# notminimal
pred : N -> NP -> Cl
= \n,x -> mkCl x (mkNP a_Art n) ;
pred : CN -> NP -> Cl
= \n,x -> mkCl x (mkNP a_Art n) ;
pred : NP -> NP -> Cl
= \n,x -> mkCl x n ;
pred : N2 -> NP -> NP -> Cl --# notminimal
= \n,x,y -> mkCl x (mkNP a_Art (mkCN n y)) ; --# notminimal
pred : N -> NP -> NP -> Cl --# notminimal
= \n,x,y -> mkCl (mkNP and_Conj x y) (mkNP a_Art plNum n) ; --# notminimal
pred : Adv -> NP -> Cl
= \a,x -> mkCl x a ;
pred : Prep -> NP -> NP -> Cl
= \p,x,y -> mkCl x (mkAdv p y) ;
} ;
app = overload {
app : N -> NP
= \n -> mkNP the_Art n ;
app : N2 -> NP -> NP --# notminimal
= \n,x -> mkNP the_Art (mkCN n x) ; --# notminimal
app : N3 -> NP -> NP -> NP --# notminimal
= \n,x,y -> mkNP the_Art (mkCN n x y) ; --# notminimal
app : N2 -> NP -> NP -> NP --# notminimal
= \n,x,y -> mkNP the_Art (mkCN n (mkNP and_Conj x y)) ; --# notminimal
app : N2 -> N -> CN --# notminimal
= \f,n -> mkCN f (mkNP a_Art plNum n) ; --# notminimal
app : N2 -> NP -> CN --# notminimal
= mkCN ; --# notminimal
app : N3 -> NP -> NP -> CN --# notminimal
= mkCN ; --# notminimal
app : N2 -> NP -> NP -> CN --# notminimal
= \n,x,y -> mkCN n (mkNP and_Conj x y) ; --# notminimal
} ;
coord = overload { --# notminimal
coord : Conj -> Adv -> Adv -> Adv --# notminimal
= mkAdv ; --# notminimal
coord : Conj -> AP -> AP -> AP --# notminimal
= mkAP ; --# notminimal
coord : Conj -> NP -> NP -> NP --# notminimal
= mkNP ; --# notminimal
coord : Conj -> S -> S -> S --# notminimal
= mkS ; --# notminimal
coord : Conj -> ListAdv -> Adv --# notminimal
= mkAdv ; --# notminimal
coord : Conj -> ListAP -> AP --# notminimal
= mkAP ; --# notminimal
coord : Conj -> ListNP -> NP --# notminimal
= mkNP ; --# notminimal
coord : Conj -> ListS -> S --# notminimal
= mkS ; --# notminimal
} ; --# notminimal
mod = overload {
mod : A -> N -> CN
= mkCN ;
mod : AP -> CN -> CN
= mkCN ;
mod : AdA -> A -> AP
= mkAP ;
mod : Det -> N -> NP
= mkNP ;
mod : Det -> CN -> NP
= mkNP ;
mod : Quant -> N -> NP
= mkNP ;
mod : Quant -> CN -> NP
= mkNP ;
mod : Predet -> N -> NP
= \p,n -> mkNP p (mkNP a_Art n) ;
mod : Numeral -> N -> NP
= mkNP ;
} ;
neg = overload {
neg : Imp -> Utt
= mkUtt negativePol ;
neg : Cl -> S
= mkS negativePol ;
neg : QCl -> QS
= mkQS negativePol ;
neg : RCl -> RS --# notminimal
= mkRS negativePol ; --# notminimal
};
}