forked from GitHub/gf-core
latin adjectives and determiners
This commit is contained in:
@@ -1,12 +1,11 @@
|
|||||||
concrete AdjectiveLat of Adjective = CatLat ** open ResLat, Prelude in {
|
concrete AdjectiveLat of Adjective = CatLat ** open ResLat, Prelude in {
|
||||||
|
|
||||||
{-
|
|
||||||
lin
|
lin
|
||||||
|
|
||||||
PositA a = {
|
PositA a = a ;
|
||||||
s = \\_ => a.s ! AAdj Posit ;
|
|
||||||
isPre = True
|
{-
|
||||||
} ;
|
|
||||||
ComparA a np = {
|
ComparA a np = {
|
||||||
s = \\_ => a.s ! AAdj Compar ++ "than" ++ np.s ! Nom ;
|
s = \\_ => a.s ! AAdj Compar ++ "than" ++ np.s ! Nom ;
|
||||||
isPre = False
|
isPre = False
|
||||||
@@ -28,13 +27,13 @@ concrete AdjectiveLat of Adjective = CatLat ** open ResLat, Prelude in {
|
|||||||
s = \\a => ap.s ! a ++ sc.s ;
|
s = \\a => ap.s ! a ++ sc.s ;
|
||||||
isPre = False
|
isPre = False
|
||||||
} ;
|
} ;
|
||||||
|
-}
|
||||||
|
|
||||||
AdAP ada ap = {
|
AdAP ada ap = {
|
||||||
s = \\a => ada.s ++ ap.s ! a ;
|
s = \\g,n,c => ada.s ++ ap.s ! g ! n ! c ;
|
||||||
isPre = ap.isPre
|
isPre = ap.isPre
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
UseA2 a = a ;
|
-- UseA2 a = a ;
|
||||||
-}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -40,21 +40,21 @@ concrete CatLat of Cat = CommonX ** open ResLat, Prelude in {
|
|||||||
--
|
--
|
||||||
VP = ResLat.VP ;
|
VP = ResLat.VP ;
|
||||||
VPSlash = ResLat.VP ** {c2 : Preposition} ;
|
VPSlash = ResLat.VP ** {c2 : Preposition} ;
|
||||||
-- Comp = {s : Agr => Str} ;
|
Comp = {s : Gender => Number => Case => Str} ;
|
||||||
--
|
--
|
||||||
---- Adjective
|
---- Adjective
|
||||||
--
|
--
|
||||||
-- AP = {s : Agr => Str ; isPre : Bool} ;
|
AP = Adjective ** {isPre : Bool} ; ---- {s : Agr => Str ; isPre : Bool} ;
|
||||||
--
|
--
|
||||||
---- Noun
|
---- Noun
|
||||||
--
|
--
|
||||||
-- CN = {s : Number => Case => Str ; g : Gender} ;
|
CN = {s : Number => Case => Str ; g : Gender} ;
|
||||||
NP, Pron = {s : Case => Str ; g : Gender ; n : Number ; p : Person} ;
|
NP, Pron = {s : Case => Str ; g : Gender ; n : Number ; p : Person} ;
|
||||||
-- Det = {s,sp : Str ; n : Number} ;
|
Det = Determiner ;
|
||||||
-- Predet, Ord = {s : Str} ;
|
-- Predet, Ord = {s : Str} ;
|
||||||
-- Num = {s : Str ; n : Number ; hasCard : Bool} ;
|
Num = {s : Gender => Case => Str ; n : Number} ;
|
||||||
-- Card = {s : Str ; n : Number} ;
|
-- Card = {s : Str ; n : Number} ;
|
||||||
-- Quant = {s,sp : Bool => Number => Str} ;
|
Quant = Quantifier ;
|
||||||
--
|
--
|
||||||
---- Numeral
|
---- Numeral
|
||||||
--
|
--
|
||||||
@@ -79,7 +79,7 @@ concrete CatLat of Cat = CommonX ** open ResLat, Prelude in {
|
|||||||
-- VV = {s : VVForm => Str ; isAux : Bool} ;
|
-- VV = {s : VVForm => Str ; isAux : Bool} ;
|
||||||
-- V2V = Verb ** {c2 : Str ; isAux : Bool} ;
|
-- V2V = Verb ** {c2 : Str ; isAux : Bool} ;
|
||||||
--
|
--
|
||||||
A = Adjective ;
|
A = Adjective ** {isPre : Bool} ;
|
||||||
-- A2 = {s : AForm => Str ; c2 : Str} ;
|
-- A2 = {s : AForm => Str ; c2 : Str} ;
|
||||||
--
|
--
|
||||||
N = Noun ;
|
N = Noun ;
|
||||||
|
|||||||
@@ -85,8 +85,8 @@ lin
|
|||||||
-- garden_N = regN "garden" ;
|
-- garden_N = regN "garden" ;
|
||||||
-- girl_N = mkN feminine (regN "girl") ;
|
-- girl_N = mkN feminine (regN "girl") ;
|
||||||
-- glove_N = regN "glove" ;
|
-- glove_N = regN "glove" ;
|
||||||
-- gold_N = regN "gold" ;
|
gold_N = mkN "aurum" ;
|
||||||
-- good_A = mkADeg "good" "better" "best" "well" ;
|
good_A = mkA "bonus" ;
|
||||||
-- go_V = mk5V "go" "goes" "went" "gone" "going" ;
|
-- go_V = mk5V "go" "goes" "went" "gone" "going" ;
|
||||||
-- green_A = regADeg "green" ;
|
-- green_A = regADeg "green" ;
|
||||||
-- harbour_N = regN "harbour" ;
|
-- harbour_N = regN "harbour" ;
|
||||||
|
|||||||
@@ -3,11 +3,11 @@ concrete NounLat of Noun = CatLat ** open ResLat, Prelude in {
|
|||||||
flags optimize=all_subs ;
|
flags optimize=all_subs ;
|
||||||
|
|
||||||
lin
|
lin
|
||||||
-- DetCN det cn = {
|
DetCN det cn = {
|
||||||
-- s = \\c => det.s ++ cn.s ! det.n ! c ;
|
s = \\c => det.s ! cn.g ! c ++ cn.s ! det.n ! c ;
|
||||||
-- a = agrgP3 det.n cn.g
|
n = det.n ; g = cn.g ; p = P3
|
||||||
-- } ;
|
} ;
|
||||||
--
|
|
||||||
-- UsePN pn = pn ** {a = agrgP3 Sg pn.g} ;
|
-- UsePN pn = pn ** {a = agrgP3 Sg pn.g} ;
|
||||||
UsePron p = p ;
|
UsePron p = p ;
|
||||||
|
|
||||||
@@ -37,12 +37,12 @@ concrete NounLat of Noun = CatLat ** open ResLat, Prelude in {
|
|||||||
-- n = num.n
|
-- n = num.n
|
||||||
-- } ;
|
-- } ;
|
||||||
--
|
--
|
||||||
-- DetQuant quant num = {
|
DetQuant quant num = {
|
||||||
-- s = quant.s ! num.hasCard ! num.n ++ num.s ;
|
s = \\g,c => quant.s ! num.n ! g ! c ++ num.s ! g ! c ;
|
||||||
-- sp = quant.sp ! num.hasCard ! num.n ++ num.s ;
|
sp = \\g,c => quant.sp ! num.n ! g ! c ++ num.s ! g ! c ;
|
||||||
-- n = num.n
|
n = num.n
|
||||||
-- } ;
|
} ;
|
||||||
--
|
|
||||||
-- DetNP det = {
|
-- DetNP det = {
|
||||||
-- s = \\c => det.sp ; ---- case
|
-- s = \\c => det.sp ; ---- case
|
||||||
-- a = agrP3 det.n
|
-- a = agrP3 det.n
|
||||||
@@ -53,10 +53,9 @@ concrete NounLat of Noun = CatLat ** open ResLat, Prelude in {
|
|||||||
-- sp = \\_,_ => p.sp
|
-- sp = \\_,_ => p.sp
|
||||||
-- } ;
|
-- } ;
|
||||||
--
|
--
|
||||||
-- NumSg = {s = []; n = Sg ; hasCard = False} ;
|
NumSg = {s = \\_,_ => [] ; n = Sg} ;
|
||||||
-- NumPl = {s = []; n = Pl ; hasCard = False} ;
|
NumPl = {s = \\_,_ => [] ; n = Pl} ;
|
||||||
-----b NoOrd = {s = []} ;
|
|
||||||
--
|
|
||||||
-- NumCard n = n ** {hasCard = True} ;
|
-- NumCard n = n ** {hasCard = True} ;
|
||||||
--
|
--
|
||||||
-- NumDigits n = {s = n.s ! NCard ; n = n.n} ;
|
-- NumDigits n = {s = n.s ! NCard ; n = n.n} ;
|
||||||
@@ -95,7 +94,7 @@ concrete NounLat of Noun = CatLat ** open ResLat, Prelude in {
|
|||||||
-- a = agrP3 Sg
|
-- a = agrP3 Sg
|
||||||
-- } ;
|
-- } ;
|
||||||
--
|
--
|
||||||
-- UseN n = n ;
|
UseN n = n ;
|
||||||
-- UseN2 n = n ;
|
-- UseN2 n = n ;
|
||||||
-----b UseN3 n = n ;
|
-----b UseN3 n = n ;
|
||||||
--
|
--
|
||||||
|
|||||||
@@ -34,6 +34,15 @@ oper
|
|||||||
= \x,y,z -> noun_ngg x y z ** {lock_N = <>} ;
|
= \x,y,z -> noun_ngg x y z ** {lock_N = <>} ;
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
|
mkA = overload {
|
||||||
|
mkA : (verbum : Str) -> A
|
||||||
|
= \n -> adj n ** {isPre = False ; lock_A = <>} ;
|
||||||
|
mkA : (verbum, verbi : Str) -> A
|
||||||
|
= \x,y -> adj123 x y ** {isPre = False ; lock_A = <>} ;
|
||||||
|
mkA : (bonus,bona,bonum : N) -> A
|
||||||
|
= \x,y,z -> mkAdjective x y z ** {isPre = False ; lock_A = <>} ;
|
||||||
|
} ;
|
||||||
|
|
||||||
|
|
||||||
mkV = overload {
|
mkV = overload {
|
||||||
mkV : (tacere : Str) -> V
|
mkV : (tacere : Str) -> V
|
||||||
|
|||||||
@@ -219,6 +219,52 @@ oper
|
|||||||
in
|
in
|
||||||
mkAdjective (noun12 bonus) (noun1 (bon + "a")) (noun2um (bon + "um")) ;
|
mkAdjective (noun12 bonus) (noun1 (bon + "a")) (noun2um (bon + "um")) ;
|
||||||
|
|
||||||
|
adj3x : (_,_ : Str) -> Adjective = \acer,acris ->
|
||||||
|
let
|
||||||
|
ac = Predef.tk 2 acer ;
|
||||||
|
acrise : Str * Str = case acer of {
|
||||||
|
_ + "er" => <ac + "ris", ac + "re"> ;
|
||||||
|
_ + "is" => <acer , ac + "e"> ;
|
||||||
|
_ => <acer , acer>
|
||||||
|
}
|
||||||
|
in
|
||||||
|
mkAdjective
|
||||||
|
(noun3adj acer acris Masc)
|
||||||
|
(noun3adj acrise.p1 acris Fem)
|
||||||
|
(noun3adj acrise.p2 acris Neutr) ;
|
||||||
|
|
||||||
|
noun3adj : Str -> Str -> Gender -> Noun = \audax,audacis,g ->
|
||||||
|
let
|
||||||
|
audac = Predef.tk 2 audacis ;
|
||||||
|
audacem = case g of {Neutr => audax ; _ => audac + "em"} ;
|
||||||
|
audaces = case g of {Neutr => audac +"ia" ; _ => audac + "es"} ;
|
||||||
|
audaci = audac + "i" ;
|
||||||
|
in
|
||||||
|
mkNoun
|
||||||
|
audax audacem (audac + "is") audaci audaci audax
|
||||||
|
audaces audaces (audac + "ium") (audac + "ibus")
|
||||||
|
g ;
|
||||||
|
|
||||||
|
|
||||||
|
-- smart paradigm
|
||||||
|
|
||||||
|
adj123 : Str -> Str -> Adjective = \bonus,boni ->
|
||||||
|
case <bonus,boni> of {
|
||||||
|
<_ + ("us" | "er"), _ + "i"> => adj12 bonus ;
|
||||||
|
<_ + ("us" | "er"), _ + "is"> => adj3x bonus boni ;
|
||||||
|
<_ , _ + "is"> => adj3x bonus boni ;
|
||||||
|
_ => Predef.error ("adj123: not applicable to" ++ bonus ++ boni)
|
||||||
|
} ;
|
||||||
|
|
||||||
|
adj : Str -> Adjective = \bonus ->
|
||||||
|
case bonus of {
|
||||||
|
_ + ("us" | "er") => adj12 bonus ;
|
||||||
|
facil + "is" => adj3x bonus bonus ;
|
||||||
|
feli + "x" => adj3x bonus (feli + "cis") ;
|
||||||
|
_ => adj3x bonus (bonus + "is") ---- any example?
|
||||||
|
} ;
|
||||||
|
|
||||||
|
|
||||||
-- verbs
|
-- verbs
|
||||||
|
|
||||||
param
|
param
|
||||||
@@ -297,7 +343,7 @@ oper
|
|||||||
}
|
}
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
esseV : Verb =
|
esse_V : Verb =
|
||||||
let
|
let
|
||||||
esse = mkVerb "es" "si" "era" "sum" "esse" "fui" "*futus"
|
esse = mkVerb "es" "si" "era" "sum" "esse" "fui" "*futus"
|
||||||
"ero" "erunt" "eri" ;
|
"ero" "erunt" "eri" ;
|
||||||
@@ -431,7 +477,8 @@ oper
|
|||||||
VP : Type = {
|
VP : Type = {
|
||||||
fin : VActForm => Str ;
|
fin : VActForm => Str ;
|
||||||
inf : VAnter => Str ;
|
inf : VAnter => Str ;
|
||||||
obj : Str
|
obj : Str ;
|
||||||
|
adj : Gender => Number => Str
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
VPSlash = VP ** {c2 : Preposition} ;
|
VPSlash = VP ** {c2 : Preposition} ;
|
||||||
@@ -439,7 +486,8 @@ oper
|
|||||||
predV : Verb -> VP = \v -> {
|
predV : Verb -> VP = \v -> {
|
||||||
fin = v.act ;
|
fin = v.act ;
|
||||||
inf = v.inf ;
|
inf = v.inf ;
|
||||||
obj = []
|
obj = [] ;
|
||||||
|
adj = \\_,_ => []
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
predV2 : (Verb ** {c : Preposition}) -> VPSlash = \v -> predV v ** {c2 = v.c} ;
|
predV2 : (Verb ** {c : Preposition}) -> VPSlash = \v -> predV v ** {c2 = v.c} ;
|
||||||
@@ -449,13 +497,21 @@ oper
|
|||||||
insertObj : Str -> VP -> VP = \obj,vp -> {
|
insertObj : Str -> VP -> VP = \obj,vp -> {
|
||||||
fin = vp.fin ;
|
fin = vp.fin ;
|
||||||
inf = vp.inf ;
|
inf = vp.inf ;
|
||||||
obj = obj ++ vp.obj
|
obj = obj ++ vp.obj ;
|
||||||
|
adj = vp.adj
|
||||||
|
} ;
|
||||||
|
|
||||||
|
insertAdj : (Gender => Number => Case => Str) -> VP -> VP = \adj,vp -> {
|
||||||
|
fin = vp.fin ;
|
||||||
|
inf = vp.inf ;
|
||||||
|
obj = vp.obj ;
|
||||||
|
adj = \\g,n => adj ! g ! n ! Nom ++ vp.adj ! g ! n
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
Clause = {s : VAnter => VTense => Polarity => Str} ;
|
Clause = {s : VAnter => VTense => Polarity => Str} ;
|
||||||
|
|
||||||
mkClause : Pronoun -> VP -> Clause = \np,vp -> {
|
mkClause : Pronoun -> VP -> Clause = \np,vp -> {
|
||||||
s = \\a,t,p => np.s ! Nom ++ vp.obj ++ negation p ++
|
s = \\a,t,p => np.s ! Nom ++ vp.obj ++ vp.adj ! np.g ! np.n ++ negation p ++
|
||||||
vp.fin ! VAct a t np.n np.p
|
vp.fin ! VAct a t np.n np.p
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
@@ -463,5 +519,40 @@ oper
|
|||||||
Pos => [] ;
|
Pos => [] ;
|
||||||
Neg => "non"
|
Neg => "non"
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
|
-- determiners
|
||||||
|
|
||||||
|
Determiner : Type = {
|
||||||
|
s,sp : Gender => Case => Str ;
|
||||||
|
n : Number
|
||||||
|
} ;
|
||||||
|
|
||||||
|
Quantifier : Type = {
|
||||||
|
s,sp : Number => Gender => Case => Str ;
|
||||||
|
} ;
|
||||||
|
|
||||||
|
mkQuantifG : (_,_,_,_,_ : Str) -> (_,_,_,_ : Str) -> (_,_,_ : Str) ->
|
||||||
|
Gender => Case => Str =
|
||||||
|
\mn,ma,mg,md,mab, fno,fa,fg,fab, nn,ng,nab -> table {
|
||||||
|
Masc => pronForms mn ma mg md mab ;
|
||||||
|
Fem => pronForms fno fa fg md fab ;
|
||||||
|
Neutr => pronForms nn nn ng md nab
|
||||||
|
} ;
|
||||||
|
|
||||||
|
mkQuantifier : (sg,pl : Gender => Case => Str) -> Quantifier = \sg,pl ->
|
||||||
|
let ssp = table {Sg => sg ; Pl => pl}
|
||||||
|
in {
|
||||||
|
s = ssp ;
|
||||||
|
sp = ssp
|
||||||
|
} ;
|
||||||
|
|
||||||
|
hic_Quantifier = mkQuantifier
|
||||||
|
(mkQuantifG
|
||||||
|
"hic" "hunc" "huius" "huic" "hoc" "haec" "hanc" "huius" "hac" "hoc" "huius" "hoc")
|
||||||
|
(mkQuantifG
|
||||||
|
"hi" "hos" "horum" "his" "his" "hae" "has" "harum" "his" "hocec" "horum" "his")
|
||||||
|
;
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -95,12 +95,12 @@ concrete StructuralLat of Structural = CatLat **
|
|||||||
-- there7from_Adv = ss ["from there"] ;
|
-- there7from_Adv = ss ["from there"] ;
|
||||||
-- therefore_PConj = ss "therefore" ;
|
-- therefore_PConj = ss "therefore" ;
|
||||||
-- they_Pron = mkPron "they" "them" "their" "theirs" Pl P3 Masc ; ----
|
-- they_Pron = mkPron "they" "them" "their" "theirs" Pl P3 Masc ; ----
|
||||||
-- this_Quant = mkQuant "this" "these" ;
|
this_Quant = hic_Quantifier ;
|
||||||
-- through_Prep = ss "through" ;
|
-- through_Prep = ss "through" ;
|
||||||
-- too_AdA = ss "too" ;
|
-- too_AdA = ss "too" ;
|
||||||
-- to_Prep = ss "to" ;
|
-- to_Prep = ss "to" ;
|
||||||
-- under_Prep = ss "under" ;
|
-- under_Prep = ss "under" ;
|
||||||
-- very_AdA = ss "very" ;
|
very_AdA = ss "valde" ;
|
||||||
-- want_VV = P.mkVV (P.regV "want") ;
|
-- want_VV = P.mkVV (P.regV "want") ;
|
||||||
-- we_Pron = mkPron "we" "us" "our" "ours" Pl P1 Masc ;
|
-- we_Pron = mkPron "we" "us" "our" "ours" Pl P1 Masc ;
|
||||||
-- whatPl_IP = mkIP "what" "what" "what's" Pl ;
|
-- whatPl_IP = mkIP "what" "what" "what's" Pl ;
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ concrete VerbLat of Verb = CatLat ** open ResLat in {
|
|||||||
-- (insertObjc (\\a => infVP vv.isAux vp a) (predVc vv)) **
|
-- (insertObjc (\\a => infVP vv.isAux vp a) (predVc vv)) **
|
||||||
-- {c2 = vp.c2} ;
|
-- {c2 = vp.c2} ;
|
||||||
--
|
--
|
||||||
-- UseComp comp = insertObj comp.s (predAux auxBe) ;
|
UseComp comp = insertAdj comp.s (predV esse_V) ;
|
||||||
--
|
--
|
||||||
-- AdvVP vp adv = insertObj (\\_ => adv.s) vp ;
|
-- AdvVP vp adv = insertObj (\\_ => adv.s) vp ;
|
||||||
--
|
--
|
||||||
@@ -43,7 +43,7 @@ concrete VerbLat of Verb = CatLat ** open ResLat in {
|
|||||||
--
|
--
|
||||||
-----b UseVS, UseVQ = \vv -> {s = vv.s ; c2 = [] ; isRefl = vv.isRefl} ; -- no "to"
|
-----b UseVS, UseVQ = \vv -> {s = vv.s ; c2 = [] ; isRefl = vv.isRefl} ; -- no "to"
|
||||||
--
|
--
|
||||||
-- CompAP ap = ap ;
|
CompAP ap = ap ;
|
||||||
-- CompNP np = {s = \\_ => np.s ! Acc} ;
|
-- CompNP np = {s = \\_ => np.s ! Acc} ;
|
||||||
-- CompAdv a = {s = \\_ => a.s} ;
|
-- CompAdv a = {s = \\_ => a.s} ;
|
||||||
--
|
--
|
||||||
|
|||||||
Reference in New Issue
Block a user