Swedish functor implementation of Base

This commit is contained in:
aarne
2007-10-21 10:45:51 +00:00
parent f668736f36
commit ca3535fd87
10 changed files with 54 additions and 27 deletions

View File

@@ -11,13 +11,12 @@ domain = [0 .. 100]
iS :: GS -> Prop
iS s = case s of
GPredAP np ap -> iNP np (iAP ap)
GConjS c s t -> iConj c (iS s) (iS t)
iNP :: GNP -> (Ent -> Prop) -> Prop
iNP np p = case np of
GEvery cn -> all (\x -> not (iCN cn x) || p x) domain
GSome cn -> any (\x -> iCN cn x && p x) domain
GNone cn -> not (any (\x -> iCN cn x && p x) domain)
GNone -> not (any (\x -> p x) domain)
GMany pns -> and (map p (iListPN pns))
GConjNP c np1 np2 -> iConj c (iNP np1 p) (iNP np2 p)
GUsePN a -> p (iPN a)
@@ -74,7 +73,7 @@ question2answer :: GQuestion -> GAnswer
question2answer q = case iQuestion q of
Left True -> GYes
Left False -> GNo
Right [] -> GValue (GNone GNumber)
Right [] -> GValue GNone
Right [v] -> GValue (GUsePN (ent2pn v))
Right vs -> GValue (GMany (GListPN (map ent2pn vs)))

View File

@@ -19,14 +19,12 @@ fun
ModCN : AP -> CN -> CN ;
ConjS : Conj -> S -> S -> S ;
ConjAP : Conj -> AP -> AP -> AP ;
ConjNP : Conj -> NP -> NP -> NP ;
UsePN : PN -> NP ;
Every : CN -> NP ;
Some : CN -> NP ;
None : CN -> NP ;
And, Or : Conj ;
@@ -55,6 +53,7 @@ fun
No : Answer ;
Value : NP -> Answer ;
None : NP ;
Many : ListPN -> NP ;
BasePN : PN -> PN -> ListPN ;
ConsPN : PN -> ListPN -> ListPN ;

View File

@@ -13,14 +13,12 @@ lin
ModCN = cc2 ;
ConjS c = infixSS c.s ;
ConjAP c = infixSS c.s ;
ConjNP c = infixSS c.s ;
UsePN a = a ;
Every = prefixSS "every" ;
Some = prefixSS "some" ;
None = prefixSS "no" ;
And = ss "and" ;
Or = ss "or" ;
@@ -49,6 +47,7 @@ lin
No = ss "no" ;
Value np = np ;
None = ss "none" ;
Many list = list ;
BasePN = infixSS "and" ;

View File

@@ -6,7 +6,7 @@ flags lexer=literals ; unlexer=text ;
lincat
Question = G.Phr ;
Answer = G.Phr ;
S = Cl ;
S = G.Cl ;
NP = G.NP ;
PN = G.NP ;
CN = G.CN ;
@@ -22,14 +22,12 @@ lin
ModCN = mkCN ;
--- ConjS = mkS ;
ConjAP = mkAP ;
ConjNP = mkNP ;
UsePN p = p ;
Every = mkNP every_Det ;
Some = mkNP someSg_Det ;
--- None = mkNP noSg_Det ; ---
And = and_Conj ;
Or = or_Conj ;
@@ -48,7 +46,8 @@ lin
Sum = prefix sum_N2 ;
Product = prefix product_N2 ;
--- GCD = prefixSS ["the greatest common divisor of"] ;
GCD nps = mkNP (mkDet (mkQuantSg defQuant) (mkOrd great_A))
(mkCN common_A (mkCN divisor_N2 (mkNP and_Conj nps))) ;
WhatIs np = mkPhr (mkQS (mkQCl whatSg_IP (mkVP np))) ;
WhichAre cn ap = mkPhr (mkQS (mkQCl (mkIP whichPl_IDet cn) (mkVP ap))) ;
@@ -59,6 +58,7 @@ lin
Value np = mkPhr (mkUtt np) ;
Many list = mkNP and_Conj list ;
None = none_NP ;
BasePN = G.BaseNP ;
ConsPN = G.ConsNP ;

View File

@@ -0,0 +1,8 @@
--# -path=.:prelude:present:api:mathematical
concrete BaseSwe of Base = BaseI with
(Syntax = SyntaxSwe),
(Grammar = GrammarSwe),
(G = GrammarSwe),
(Symbolic = SymbolicSwe),
(LexBase = LexBaseSwe) ;

View File

@@ -83,7 +83,7 @@ data GNP =
GConjNP GConj GNP GNP
| GEvery GCN
| GMany GListPN
| GNone GCN
| GNone
| GSome GCN
| GUsePN GPN
deriving Show
@@ -101,9 +101,7 @@ data GQuestion =
| GWhichAre GCN GAP
deriving Show
data GS =
GConjS GConj GS GS
| GPredAP GNP GAP
data GS = GPredAP GNP GAP
deriving Show
@@ -141,7 +139,7 @@ instance Gf GNP where
gf (GConjNP x1 x2 x3) = DTr [] (AC (CId "ConjNP")) [gf x1, gf x2, gf x3]
gf (GEvery x1) = DTr [] (AC (CId "Every")) [gf x1]
gf (GMany x1) = DTr [] (AC (CId "Many")) [gf x1]
gf (GNone x1) = DTr [] (AC (CId "None")) [gf x1]
gf GNone = DTr [] (AC (CId "None")) []
gf (GSome x1) = DTr [] (AC (CId "Some")) [gf x1]
gf (GUsePN x1) = DTr [] (AC (CId "UsePN")) [gf x1]
@@ -156,9 +154,7 @@ instance Gf GQuestion where
gf (GWhatIs x1) = DTr [] (AC (CId "WhatIs")) [gf x1]
gf (GWhichAre x1 x2) = DTr [] (AC (CId "WhichAre")) [gf x1, gf x2]
instance Gf GS where
gf (GConjS x1 x2 x3) = DTr [] (AC (CId "ConjS")) [gf x1, gf x2, gf x3]
gf (GPredAP x1 x2) = DTr [] (AC (CId "PredAP")) [gf x1, gf x2]
instance Gf GS where gf (GPredAP x1 x2) = DTr [] (AC (CId "PredAP")) [gf x1, gf x2]
instance Fg GA2 where
@@ -215,7 +211,7 @@ instance Fg GNP where
DTr [] (AC (CId "ConjNP")) [x1,x2,x3] -> GConjNP (fg x1) (fg x2) (fg x3)
DTr [] (AC (CId "Every")) [x1] -> GEvery (fg x1)
DTr [] (AC (CId "Many")) [x1] -> GMany (fg x1)
DTr [] (AC (CId "None")) [x1] -> GNone (fg x1)
DTr [] (AC (CId "None")) [] -> GNone
DTr [] (AC (CId "Some")) [x1] -> GSome (fg x1)
DTr [] (AC (CId "UsePN")) [x1] -> GUsePN (fg x1)
_ -> error ("no NP " ++ show t)
@@ -240,7 +236,6 @@ instance Fg GQuestion where
instance Fg GS where
fg t =
case t of
DTr [] (AC (CId "ConjS")) [x1,x2,x3] -> GConjS (fg x1) (fg x2) (fg x3)
DTr [] (AC (CId "PredAP")) [x1,x2] -> GPredAP (fg x1) (fg x2)
_ -> error ("no S " ++ show t)

View File

@@ -4,6 +4,8 @@ oper
even_A : A ;
odd_A : A ;
prime_A : A ;
common_A : A ;
great_A : A ;
equal_A2 : A2 ;
greater_A2 : A2 ;
smaller_A2 : A2 ;
@@ -11,7 +13,7 @@ oper
number_N : N ;
sum_N2 : N2 ;
product_N2 : N2 ;
gcd_N2 : N2 ;
divisor_N2 : N2 ;
noSg_Det : Det ;
none_NP : NP ; ---
}

View File

@@ -4,14 +4,17 @@ oper
even_A = mkA "even" ;
odd_A = mkA "odd" ;
prime_A = mkA "prime" ;
great_A = mkA "great" ;
common_A = mkA "common" ;
equal_A2 = mkA2 (mkA "equal") (mkPrep "to") ;
greater_A2 = mkA2 (mkA "greater") (mkPrep "than") ; ---
smaller_A2 = mkA2 (mkA "smaller") (mkPrep "than") ; ---
divisible_A2 = mkA2 (mkA "divisible") (mkPrep "by") ;
number_N = mkN "number" ;
sum_N2 = mkN2 (mkN "sum") (mkPrep "of") ;
-- product_N2 : N2 ;
-- gcd_N2 : N2 ;
product_N2 = mkN2 (mkN "product") (mkPrep "of") ;
divisor_N2 = mkN2 (mkN "divisor") (mkPrep "of") ;
none_NP = mkNP (mkPN "none") ; ---
-- noSg_Det : Det ;
}

View File

@@ -0,0 +1,22 @@
instance LexBaseSwe of LexBase = open SyntaxSwe, ParadigmsSwe in {
oper
even_A = mkA "jämn" ;
odd_A = invarA "udda" ;
prime_A = mkA "prim" ;
great_A = mkA "stor" "större" "störst" ;
common_A = mkA "gemensam" ;
equal_A2 = mkA2 (invarA "lika") (mkPrep "med") ;
greater_A2 = mkA2 (invarA "större") (mkPrep "än") ; ---
smaller_A2 = mkA2 (invarA "mindre") (mkPrep "än") ; ---
divisible_A2 = mkA2 (mkA "delbar") (mkPrep "med") ;
number_N = mkN "tal" "tal" ;
sum_N2 = mkN2 (mkN "summa") (mkPrep "av") ;
product_N2 = mkN2 (mkN "produkt") (mkPrep "av") ;
divisor_N2 = mkN2 (mkN "delare") (mkPrep "av") ;
none_NP = mkNP (mkPN "inget" neutrum) ; ---
invarA : Str -> A = \x -> mkA x x x x x ; ---
}

View File

@@ -25,7 +25,7 @@ concrete StructuralSwe of Structural = CatSwe **
during_Prep = ss "under" ;
either7or_DConj = sd2 "antingen" "eller" ** {n = Sg} ;
everybody_NP = regNP "alla" "allas" Plg ;
every_Det = {s = \\_,_ => "varje" ; n = Sg ; det = DDef Indef} ;
every_Det = {s = \\_,_ => "varje" ; n = Sg ; det = DIndef} ;
everything_NP = regNP "allting" "alltings" SgNeutr ;
everywhere_Adv = ss "överallt" ;
few_Det = {s = \\_,_ => "få" ; n = Pl ; det = DDef Indef} ;