1
0
forked from GitHub/gf-rgl

Automatic whitespace removal

This commit is contained in:
Inari Listenmaa
2020-05-04 13:45:43 +02:00
parent b5902789a8
commit 5c48828e8e
15 changed files with 178 additions and 182 deletions

View File

@@ -32,14 +32,14 @@ concrete AdjectiveFin of Adjective = CatFin ** open ResFin, StemFin, Prelude in
ComplA2 a np = { ComplA2 a np = {
s = \\isMod,af => s = \\isMod,af =>
preOrPost isMod (appCompl True Pos a.c2 np) (sAdjFull2nforms Posit a ! af) ; preOrPost isMod (appCompl True Pos a.c2 np) (sAdjFull2nforms Posit a ! af) ;
p = [] ; hasPrefix = False p = [] ; hasPrefix = False
} ; } ;
ReflA2 a = { ReflA2 a = {
s = \\isMod,af => s = \\isMod,af =>
preOrPost isMod preOrPost isMod
(appCompl True Pos a.c2 (reflPron (agrP3 Sg))) (sAdjFull2nforms Posit a ! af) ; (appCompl True Pos a.c2 (reflPron (agrP3 Sg))) (sAdjFull2nforms Posit a ! af) ;
p = [] ; hasPrefix = False p = [] ; hasPrefix = False
} ; } ;

View File

@@ -1,7 +1,6 @@
--# -path=.:../abstract:../common:../api:../prelude --# -path=.:../abstract:../common:../api:../prelude
concrete AllFin of AllFinAbs = concrete AllFin of AllFinAbs =
LangFin - [SlashV2VNP,SlashVV, TFut], ---- to speed up linking; to remove spurious parses LangFin - [SlashV2VNP,SlashVV, TFut], ---- to speed up linking; to remove spurious parses
ExtraFin - [ProDrop, ProDropPoss, S_OSV, S_VSO, S_ASV, AdvExistNP] -- to exclude spurious parses ExtraFin - [ProDrop, ProDropPoss, S_OSV, S_VSO, S_ASV, AdvExistNP] -- to exclude spurious parses
** open ExtendFin in {} --- to make it compile by default ** open ExtendFin in {} --- to make it compile by default

View File

@@ -22,7 +22,7 @@ concrete CatFin of Cat = CommonX ** open ResFin, StemFin, Prelude in {
QCl = {s : ResFin.Tense => Anteriority => Polarity => Str} ; QCl = {s : ResFin.Tense => Anteriority => Polarity => Str} ;
IP = {s : NPForm => Str ; n : Number} ; IP = {s : NPForm => Str ; n : Number} ;
IComp = {s : Agr => Str} ; IComp = {s : Agr => Str} ;
IDet = {s : Case => Str ; n : Number ; isNum : Bool} ; IDet = {s : Case => Str ; n : Number ; isNum : Bool} ;
IQuant = {s : Number => Case => Str} ; IQuant = {s : Number => Case => Str} ;
@@ -34,15 +34,15 @@ concrete CatFin of Cat = CommonX ** open ResFin, StemFin, Prelude in {
-- Verb -- Verb
VP = StemFin.VP ; VP = StemFin.VP ;
VPSlash = StemFin.VP ** {c2 : Compl} ; VPSlash = StemFin.VP ** {c2 : Compl} ;
Comp = {s : Agr => Str} ; Comp = {s : Agr => Str} ;
-- Adjective -- Adjective
-- The $Bool$ tells whether usage is modifying (as opposed to -- The $Bool$ tells whether usage is modifying (as opposed to
-- predicative), e.g. "x on suurempi kuin y" vs. "y:tä suurempi luku". -- predicative), e.g. "x on suurempi kuin y" vs. "y:tä suurempi luku".
AP = {s : Bool => NForm => Str ; p : Str ; hasPrefix : Bool} ; AP = {s : Bool => NForm => Str ; p : Str ; hasPrefix : Bool} ;
-- Noun -- Noun
@@ -82,7 +82,7 @@ concrete CatFin of Cat = CommonX ** open ResFin, StemFin, Prelude in {
-- Open lexical classes, e.g. Lexicon -- Open lexical classes, e.g. Lexicon
V, VS, VQ = SVerb1 ; V, VS, VQ = SVerb1 ;
V2, VA, V2Q, V2S = SVerb1 ** {c2 : Compl} ; V2, VA, V2Q, V2S = SVerb1 ** {c2 : Compl} ;
V2A = SVerb1 ** {c2, c3 : Compl} ; V2A = SVerb1 ** {c2, c3 : Compl} ;
VV = SVerb1 ** {vi : VVType} ; ---- infinitive form VV = SVerb1 ** {vi : VVType} ; ---- infinitive form

View File

@@ -22,7 +22,7 @@ concrete ConjunctionFin of Conjunction =
c = ss.c c = ss.c
} ; } ;
ConjCN conj ss = ConjCN conj ss =
let s = (conjunctDistrTable NForm conj ss).s let s = (conjunctDistrTable NForm conj ss).s
in {s = s ; h = Back } ; ---- harmony? in {s = s ; h = Back } ; ---- harmony?

View File

@@ -1,6 +1,6 @@
--# -path=alltenses:.:../abstract --# -path=alltenses:.:../abstract
concrete ConstructionFin of Construction = CatFin ** concrete ConstructionFin of Construction = CatFin **
open SyntaxFin, SymbolicFin, ParadigmsFin, (L = LexiconFin), (E = ExtraFin), (R = ResFin), Prelude in { open SyntaxFin, SymbolicFin, ParadigmsFin, (L = LexiconFin), (E = ExtraFin), (R = ResFin), Prelude in {
flags coding=utf8 ; flags coding=utf8 ;
@@ -21,10 +21,10 @@ lin
how_old_QCl x = mkQCl (E.ICompAP (mkAP L.old_A)) (lin NP x) ; how_old_QCl x = mkQCl (E.ICompAP (mkAP L.old_A)) (lin NP x) ;
how_far_QCl x = mkQCl (E.IAdvAdv L.far_Adv) (lin NP x) ; how_far_QCl x = mkQCl (E.IAdvAdv L.far_Adv) (lin NP x) ;
n_unit_CN card unit cn = mkCN (invarA (SyntaxFin.mkAdv (casePrep genitive) (mkNP <lin Card card : Card> (lin CN unit))).s) cn ; n_unit_CN card unit cn = mkCN (invarA (SyntaxFin.mkAdv (casePrep genitive) (mkNP <lin Card card : Card> (lin CN unit))).s) cn ;
-- some more things -- some more things
weather_adjCl ap = mkCl (mkVP (lin AP ap)) ; weather_adjCl ap = mkCl (mkVP (lin AP ap)) ;
is_right_VP = mkVP (ParadigmsFin.mkAdv "oikeassa") ; is_right_VP = mkVP (ParadigmsFin.mkAdv "oikeassa") ;
is_wrong_VP = mkVP (ParadigmsFin.mkAdv "väärässä") ; is_wrong_VP = mkVP (ParadigmsFin.mkAdv "väärässä") ;
@@ -37,16 +37,16 @@ lin
few_X_short_of_Y np x y = few_X_short_of_Y np x y =
let kaikki_xt : Str = (mkNP all_Predet ( mkNP aPl_Det x)).s ! R.NPCase R.Nom ; let kaikki_xt : Str = (mkNP all_Predet ( mkNP aPl_Det x)).s ! R.NPCase R.Nom ;
yssa : Str = y.s ! R.NCase R.Sg R.Iness ; yssa : Str = y.s ! R.NCase R.Sg R.Iness ;
kaikki_xt_yssa : Adv = ParadigmsFin.mkAdv (kaikki_xt ++ yssa) ; kaikki_xt_yssa : Adv = ParadigmsFin.mkAdv (kaikki_xt ++ yssa) ;
olla_V : V = lin V have_V2 ; olla_V : V = lin V have_V2 ;
in mkS negativePol in mkS negativePol
(mkCl np (mkVP (mkVP olla_V) kaikki_xt_yssa)) ; (mkCl np (mkVP (mkVP olla_V) kaikki_xt_yssa)) ;
{- {-
where_go_QCl np = mkQCl (lin IAdv (ss "minne")) (mkCl np (mkVP L.go_V)) ; where_go_QCl np = mkQCl (lin IAdv (ss "minne")) (mkCl np (mkVP L.go_V)) ;
where_come_from_QCl np = mkQCl (lin IAdv (ss "mistä")) (mkCl np (mkVP L.come_V)) ; where_come_from_QCl np = mkQCl (lin IAdv (ss "mistä")) (mkCl np (mkVP L.come_V)) ;
go_here_VP = mkVP (mkVP L.go_V) (mkAdv "tänne") ; go_here_VP = mkVP (mkVP L.go_V) (mkAdv "tänne") ;
come_here_VP = mkVP (mkVP L.come_V) (mkAdv "tänne") ; come_here_VP = mkVP (mkVP L.come_V) (mkAdv "tänne") ;
come_from_here_VP = mkVP (mkVP L.come_V) (mkAdv "täältä") ; come_from_here_VP = mkVP (mkVP L.come_V) (mkAdv "täältä") ;
@@ -74,14 +74,14 @@ lin
yearAdv y = SyntaxFin.mkAdv (prePrep nominative "vuonna") y ; yearAdv y = SyntaxFin.mkAdv (prePrep nominative "vuonna") y ;
dayMonthAdv d m = ParadigmsFin.mkAdv ((mkUtt d).s ++ BIND ++ "." ++ (mkUtt (mkNP m)).s) ; dayMonthAdv d m = ParadigmsFin.mkAdv ((mkUtt d).s ++ BIND ++ "." ++ (mkUtt (mkNP m)).s) ;
monthYearAdv m y = SyntaxFin.mkAdv in_Prep (mkNP (mkNP m) (SyntaxFin.mkAdv (casePrep nominative) y)) ; monthYearAdv m y = SyntaxFin.mkAdv in_Prep (mkNP (mkNP m) (SyntaxFin.mkAdv (casePrep nominative) y)) ;
---- dayMonthYearAdv d m y = ---- dayMonthYearAdv d m y =
---- lin Adv {s = d.s ! R.NPCase R.Nom ++ BIND ++ "." ++ m.s ! R.NCase R.Sg R.Part ++ y.s ! R.NPCase R.Nom} ; ---- lin Adv {s = d.s ! R.NPCase R.Nom ++ BIND ++ "." ++ m.s ! R.NCase R.Sg R.Part ++ y.s ! R.NPCase R.Nom} ;
intYear = symb ; intYear = symb ;
intMonthday = symb ; intMonthday = symb ;
oper oper
pointWeekday : Weekday -> Str = \w -> (SyntaxFin.mkAdv (casePrep essive) (mkNP w.noun)).s ; pointWeekday : Weekday -> Str = \w -> (SyntaxFin.mkAdv (casePrep essive) (mkNP w.noun)).s ;
lincat Language = N ; lincat Language = N ;
@@ -101,14 +101,14 @@ lin
oper mkLanguage : Str -> N = \s -> mkN s ; oper mkLanguage : Str -> N = \s -> mkN s ;
oper mkWeekday : Str -> Weekday = \d -> oper mkWeekday : Str -> Weekday = \d ->
lin Weekday { lin Weekday {
noun = mkN d ; noun = mkN d ;
habitual = case d of { habitual = case d of {
_ + "i" => ParadigmsFin.mkAdv (d + "sin") ; -- tiistaisin _ + "i" => ParadigmsFin.mkAdv (d + "sin") ; -- tiistaisin
_ => ParadigmsFin.mkAdv (d + "isin") -- keskiviikkoisin _ => ParadigmsFin.mkAdv (d + "isin") -- keskiviikkoisin
} }
} ; } ;
lin second_Timeunit = mkN "sekuntti" ; lin second_Timeunit = mkN "sekuntti" ;
lin minute_Timeunit = mkN "minuutti" ; lin minute_Timeunit = mkN "minuutti" ;
@@ -126,9 +126,9 @@ lin friday_Weekday = mkWeekday "perjantai" ;
lin saturday_Weekday = mkWeekday"lauantai" ; lin saturday_Weekday = mkWeekday"lauantai" ;
lin sunday_Weekday = mkWeekday "sunnuntai" ; lin sunday_Weekday = mkWeekday "sunnuntai" ;
lin january_Month = mkN "tammikuu" ; lin january_Month = mkN "tammikuu" ;
lin february_Month = mkN "helmikuu" ; lin february_Month = mkN "helmikuu" ;
lin march_Month = mkN "maaliskuu" ; lin march_Month = mkN "maaliskuu" ;
lin april_Month = mkN "huhtikuu" ; lin april_Month = mkN "huhtikuu" ;
lin may_Month = mkN "toukokuu" ; lin may_Month = mkN "toukokuu" ;
lin june_Month = mkN "kesäkuu" ; lin june_Month = mkN "kesäkuu" ;

View File

@@ -2,5 +2,5 @@
-- documentation of Finnish in Finnish: the default introduced in LangFin -- documentation of Finnish in Finnish: the default introduced in LangFin
concrete DocumentationFin of Documentation = CatFin ** concrete DocumentationFin of Documentation = CatFin **
DocumentationFinFunctor with (Terminology = TerminologyFin) ; DocumentationFinFunctor with (Terminology = TerminologyFin) ;

View File

@@ -2,5 +2,5 @@
-- documentation of Finnish in English -- documentation of Finnish in English
concrete DocumentationFinEng of Documentation = CatFin ** concrete DocumentationFinEng of Documentation = CatFin **
DocumentationFinFunctor with (Terminology = TerminologyEng) ; DocumentationFinFunctor with (Terminology = TerminologyEng) ;

View File

@@ -1,6 +1,6 @@
--# -path=.:../abstract:../common --# -path=.:../abstract:../common
incomplete concrete DocumentationFinFunctor of Documentation = CatFin ** open incomplete concrete DocumentationFinFunctor of Documentation = CatFin ** open
Terminology, -- the interface Terminology, -- the interface
ResFin, ResFin,
StemFin, StemFin,
@@ -34,10 +34,10 @@ lin
InflectionA, InflectionA2 = \adj -> { InflectionA, InflectionA2 = \adj -> {
t = "a" ; t = "a" ;
s1 = heading1 (heading adjective_Category) ; s1 = heading1 (heading adjective_Category) ;
s2 = inflNoun (\nf -> (snoun2nounSep {s = \\f => adj.s ! Posit ! sAN f ; h = adj.h}).s ! nf) ++ s2 = inflNoun (\nf -> (snoun2nounSep {s = \\f => adj.s ! Posit ! sAN f ; h = adj.h}).s ! nf) ++
heading2 (heading comparative_Parameter) ++ heading2 (heading comparative_Parameter) ++
inflNoun (\nf -> (snoun2nounSep {s = \\f => adj.s ! Compar ! sAN f ; h = adj.h}).s ! nf) ++ inflNoun (\nf -> (snoun2nounSep {s = \\f => adj.s ! Compar ! sAN f ; h = adj.h}).s ! nf) ++
heading2 (heading superlative_Parameter) ++ heading2 (heading superlative_Parameter) ++
inflNoun (\nf -> (snoun2nounSep {s = \\f => adj.s ! Superl ! sAN f ; h = adj.h}).s ! nf) inflNoun (\nf -> (snoun2nounSep {s = \\f => adj.s ! Superl ! sAN f ; h = adj.h}).s ! nf)
} ; } ;
@@ -55,91 +55,91 @@ lin
InflectionV v = { InflectionV v = {
t = "v" ; t = "v" ;
s1 = heading1 (heading verb_Category) ++ s1 = heading1 (heading verb_Category) ++
paragraph (verbExample (S.mkCl S.she_NP v)) ; paragraph (verbExample (S.mkCl S.she_NP v)) ;
s2 = inflVerb v s2 = inflVerb v
} ; } ;
InflectionV2 v = { InflectionV2 v = {
t = "v" ; t = "v" ;
s1 = heading1 (heading verb_Category) ++ s1 = heading1 (heading verb_Category) ++
paragraph (verbExample (S.mkCl S.she_NP v S.something_NP)) ; paragraph (verbExample (S.mkCl S.she_NP v S.something_NP)) ;
s2 = inflVerb v s2 = inflVerb v
} ; } ;
InflectionV3 v = { InflectionV3 v = {
t = "v" ; t = "v" ;
s1 = heading1 (heading verb_Category) ++ s1 = heading1 (heading verb_Category) ++
paragraph (verbExample (S.mkCl S.she_NP v S.something_NP S.something_NP)) ; paragraph (verbExample (S.mkCl S.she_NP v S.something_NP S.something_NP)) ;
s2 = inflVerb v s2 = inflVerb v
} ; } ;
InflectionV2V v = { InflectionV2V v = {
t = "v" ; t = "v" ;
s1 = heading1 (heading verb_Category) ++ s1 = heading1 (heading verb_Category) ++
paragraph (verbExample (S.mkCl S.she_NP v S.we_NP (S.mkVP (L.sleep_V)))) ; paragraph (verbExample (S.mkCl S.she_NP v S.we_NP (S.mkVP (L.sleep_V)))) ;
s2 = inflVerb v s2 = inflVerb v
} ; } ;
InflectionV2S v = { InflectionV2S v = {
t = "v" ; t = "v" ;
s1 = heading1 (heading verb_Category) ++ s1 = heading1 (heading verb_Category) ++
paragraph (verbExample (S.mkCl S.she_NP v S.we_NP (lin S (ss "...")))) ; paragraph (verbExample (S.mkCl S.she_NP v S.we_NP (lin S (ss "...")))) ;
s2 = inflVerb v s2 = inflVerb v
} ; } ;
InflectionV2Q v = { InflectionV2Q v = {
t = "v" ; t = "v" ;
s1 = heading1 (heading verb_Category) ++ s1 = heading1 (heading verb_Category) ++
paragraph (verbExample (S.mkCl S.she_NP v S.we_NP (lin QS (ss "...")))) ; paragraph (verbExample (S.mkCl S.she_NP v S.we_NP (lin QS (ss "...")))) ;
s2 = inflVerb v s2 = inflVerb v
} ; } ;
InflectionV2A v = { InflectionV2A v = {
t = "v" ; t = "v" ;
s1 = heading1 (heading verb_Category) ++ s1 = heading1 (heading verb_Category) ++
paragraph (verbExample (S.mkCl S.she_NP v S.we_NP L.beautiful_A)) ; paragraph (verbExample (S.mkCl S.she_NP v S.we_NP L.beautiful_A)) ;
s2 = inflVerb v s2 = inflVerb v
} ; } ;
InflectionVV v = { InflectionVV v = {
t = "v" ; t = "v" ;
s1 = heading1 (heading verb_Category) ++ s1 = heading1 (heading verb_Category) ++
paragraph (verbExample (S.mkCl S.she_NP v (S.mkVP (L.sleep_V)))) ; paragraph (verbExample (S.mkCl S.she_NP v (S.mkVP (L.sleep_V)))) ;
s2 = inflVerb v s2 = inflVerb v
} ; } ;
InflectionVS v = { InflectionVS v = {
t = "v" ; t = "v" ;
s1 = heading1 (heading verb_Category) ++ s1 = heading1 (heading verb_Category) ++
paragraph (verbExample (S.mkCl S.she_NP v (lin S (ss "...")))) ; paragraph (verbExample (S.mkCl S.she_NP v (lin S (ss "...")))) ;
s2 = inflVerb v s2 = inflVerb v
} ; } ;
InflectionVQ v = { InflectionVQ v = {
t = "v" ; t = "v" ;
s1 = heading1 (heading verb_Category) ++ s1 = heading1 (heading verb_Category) ++
paragraph (verbExample (S.mkCl S.she_NP v (lin QS (ss "...")))) ; paragraph (verbExample (S.mkCl S.she_NP v (lin QS (ss "...")))) ;
s2 = inflVerb v s2 = inflVerb v
} ; } ;
InflectionVA v = { InflectionVA v = {
t = "v" ; t = "v" ;
s1 = heading1 (heading verb_Category) ++ s1 = heading1 (heading verb_Category) ++
paragraph (verbExample (S.mkCl S.she_NP v L.beautiful_A)) ; paragraph (verbExample (S.mkCl S.she_NP v L.beautiful_A)) ;
s2 = inflVerb v s2 = inflVerb v
} ; } ;
oper oper
verbExample : CatFin.Cl -> Str = \cl -> (S.mkUtt cl).s ; verbExample : CatFin.Cl -> Str = \cl -> (S.mkUtt cl).s ;
{- {-
-} --# notpresent -} --# notpresent
inflVerb : CatFin.V -> Str = \verb0 -> inflVerb : CatFin.V -> Str = \verb0 ->
let let
verb = sverb2verbSep verb0 ; verb = sverb2verbSep verb0 ;
vfin : ResFin.VForm -> Str = \f -> vfin : ResFin.VForm -> Str = \f ->
verb.s ! f ; verb.s ! f ;
nounNounHeading : Parameter -> Parameter -> Str = \n1,n2 -> nounNounHeading : Parameter -> Parameter -> Str = \n1,n2 ->
(S.mkUtt (G.PossNP (S.mkCN n1) (S.mkNP (snoun2nounSep n2)))).s ; (S.mkUtt (G.PossNP (S.mkCN n1) (S.mkNP (snoun2nounSep n2)))).s ;
in in
@@ -149,7 +149,7 @@ oper
th (heading singular_Parameter) ++ th (heading singular_Parameter) ++
th (heading plural_Parameter) th (heading plural_Parameter)
++ th (heading passive_Parameter) --# notpresent ++ th (heading passive_Parameter) --# notpresent
) ++ ) ++
tr (th "1.p" ++ td (vfin (Presn Sg P1)) ++ td (vfin (Presn Pl P1)) tr (th "1.p" ++ td (vfin (Presn Sg P1)) ++ td (vfin (Presn Pl P1))
++ intagAttr "td" "rowspan=3" (vfin (PassPresn True)) --# notpresent ++ intagAttr "td" "rowspan=3" (vfin (PassPresn True)) --# notpresent
) ++ ) ++
@@ -164,13 +164,13 @@ oper
th (heading singular_Parameter) ++ th (heading singular_Parameter) ++
th (heading plural_Parameter) th (heading plural_Parameter)
++ th (heading passive_Parameter) --# notpresent ++ th (heading passive_Parameter) --# notpresent
) ++ ) ++
tr (th "1.p" ++ td (vfin (Impf Sg P1)) ++ td (vfin (Impf Pl P1)) tr (th "1.p" ++ td (vfin (Impf Sg P1)) ++ td (vfin (Impf Pl P1))
++ intagAttr "td" "rowspan=3" (vfin (PassImpf True))) ++ ++ intagAttr "td" "rowspan=3" (vfin (PassImpf True))) ++
tr (th "2.p" ++ td (vfin (Impf Sg P2)) ++ td (vfin (Impf Pl P2))) ++ tr (th "2.p" ++ td (vfin (Impf Sg P2)) ++ td (vfin (Impf Pl P2))) ++
tr (th "3.p" ++ td (vfin (Impf Sg P3)) ++ td (vfin (Impf Pl P3))) ++ tr (th "3.p" ++ td (vfin (Impf Sg P3)) ++ td (vfin (Impf Pl P3))) ++
tr (th (heading negative_Parameter) ++ tr (th (heading negative_Parameter) ++
td (vfin (PastPartAct (AN (NCase Sg Nom)))) ++ td (vfin (PastPartAct (AN (NCase Sg Nom)))) ++
td (vfin (PastPartAct (AN (NCase Pl Nom)))) ++ td (vfin (PastPartAct (AN (NCase Pl Nom)))) ++
td (vfin (PassImpf False))) td (vfin (PassImpf False)))
) ++ ) ++
@@ -180,7 +180,7 @@ oper
th (heading singular_Parameter) ++ th (heading singular_Parameter) ++
th (heading plural_Parameter) th (heading plural_Parameter)
++ th (heading passive_Parameter) --# notpresent ++ th (heading passive_Parameter) --# notpresent
) ++ ) ++
tr (th "1.p" ++ td (vfin (Condit Sg P1)) ++ td (vfin (Condit Pl P1)) tr (th "1.p" ++ td (vfin (Condit Sg P1)) ++ td (vfin (Condit Pl P1))
++ intagAttr "td" "rowspan=3" (vfin (PassCondit True)) --# notpresent ++ intagAttr "td" "rowspan=3" (vfin (PassCondit True)) --# notpresent
) ++ ) ++
@@ -195,7 +195,7 @@ oper
th (heading singular_Parameter) ++ th (heading singular_Parameter) ++
th (heading plural_Parameter) th (heading plural_Parameter)
++ th (heading passive_Parameter) --# notpresent ++ th (heading passive_Parameter) --# notpresent
) ++ ) ++
tr (th "1.p" ++ td (vfin (Potent Sg P1)) ++ td (vfin (Potent Pl P1)) tr (th "1.p" ++ td (vfin (Potent Sg P1)) ++ td (vfin (Potent Pl P1))
++ intagAttr "td" "rowspan=3" (vfin (PassPotent True)) --# notpresent ++ intagAttr "td" "rowspan=3" (vfin (PassPotent True)) --# notpresent
) ++ ) ++
@@ -210,34 +210,34 @@ oper
th (heading singular_Parameter) ++ th (heading singular_Parameter) ++
th (heading plural_Parameter) th (heading plural_Parameter)
++ th (heading passive_Parameter) --# notpresent ++ th (heading passive_Parameter) --# notpresent
) ++ ) ++
tr (th "1.p" ++ td "" ++ td (vfin ImperP1Pl) tr (th "1.p" ++ td "" ++ td (vfin ImperP1Pl)
++ intagAttr "td" "rowspan=3" (vfin (PassImper True))) ++ ++ intagAttr "td" "rowspan=3" (vfin (PassImper True))) ++
tr (th "2.p" ++ td (vfin (Imper Sg)) ++ td (vfin (Imper Pl))) ++ tr (th "2.p" ++ td (vfin (Imper Sg)) ++ td (vfin (Imper Pl))) ++
tr (th "3.p" ++ td (vfin (ImperP3 Sg)) ++ td (vfin (ImperP3 Pl))) ++ tr (th "3.p" ++ td (vfin (ImperP3 Sg)) ++ td (vfin (ImperP3 Pl))) ++
tr (th (heading negative_Parameter) ++ tr (th (heading negative_Parameter) ++
td (vfin (Imper Sg)) ++ td (vfin (Imper Sg)) ++
td (vfin ImpNegPl) ++ td (vfin ImpNegPl) ++
td (vfin (PassImper False))) td (vfin (PassImper False)))
) ++ ) ++
heading2 (nounPluralHeading nominal_form_ParameterType).s ++ heading2 (nounPluralHeading nominal_form_ParameterType).s ++
heading3 (heading infinitive_Parameter) ++ heading3 (heading infinitive_Parameter) ++
frameTable ( frameTable (
tr (intagAttr "th" "rowspan=2" "1" ++ tr (intagAttr "th" "rowspan=2" "1" ++
th (heading short_Parameter) ++ --- th (heading short_Parameter) ++ ---
td (vfin (Inf Inf1))) ++ td (vfin (Inf Inf1))) ++
tr (th (heading long_Parameter) ++ --- tr (th (heading long_Parameter) ++ ---
td (vfin (Inf Inf1Long) ++ BIND ++ "(ni)")) ++ td (vfin (Inf Inf1Long) ++ BIND ++ "(ni)")) ++
tr (intagAttr "th" "rowspan=2" ("2." ++ heading active_Parameter) ++ tr (intagAttr "th" "rowspan=2" ("2." ++ heading active_Parameter) ++
th (heading inessive_Parameter) ++ th (heading inessive_Parameter) ++
td (vfin (Inf Inf2Iness))) ++ td (vfin (Inf Inf2Iness))) ++
tr (th (heading instructive_Parameter) ++ tr (th (heading instructive_Parameter) ++
td (vfin (Inf Inf2Instr))) ++ td (vfin (Inf Inf2Instr))) ++
tr (th ("2." ++ heading passive_Parameter) ++ tr (th ("2." ++ heading passive_Parameter) ++
th (heading inessive_Parameter) ++ th (heading inessive_Parameter) ++
td (vfin (Inf Inf2InessPass))) ++ td (vfin (Inf Inf2InessPass))) ++
tr (intagAttr "th" "rowspan=7" "3." ++ tr (intagAttr "th" "rowspan=7" "3." ++
th (heading inessive_Parameter) ++ td (vfin (Inf Inf3Iness))) ++ th (heading inessive_Parameter) ++ td (vfin (Inf Inf3Iness))) ++
tr (th (heading elative_Parameter) ++ td (vfin (Inf Inf3Elat))) ++ tr (th (heading elative_Parameter) ++ td (vfin (Inf Inf3Elat))) ++
tr (th (heading illative_Parameter) ++ td (vfin (Inf Inf3Illat))) ++ tr (th (heading illative_Parameter) ++ td (vfin (Inf Inf3Illat))) ++
@@ -246,7 +246,7 @@ oper
tr (th (heading instructive_Parameter) ++ td (vfin (Inf Inf3Instr))) ++ tr (th (heading instructive_Parameter) ++ td (vfin (Inf Inf3Instr))) ++
tr (th (heading instructive_Parameter ++ "pass.") ++ td (vfin (Inf Inf3InstrPass))) ++ tr (th (heading instructive_Parameter ++ "pass.") ++ td (vfin (Inf Inf3InstrPass))) ++
tr (intagAttr "th" "rowspan=2" "4." ++ tr (intagAttr "th" "rowspan=2" "4." ++
th (heading nominative_Parameter) ++ td (vfin (Inf Inf4Nom))) ++ th (heading nominative_Parameter) ++ td (vfin (Inf Inf4Nom))) ++
tr (th (heading partitive_Parameter) ++ td (vfin (Inf Inf4Part))) ++ tr (th (heading partitive_Parameter) ++ td (vfin (Inf Inf4Part))) ++
@@ -254,25 +254,25 @@ oper
) ++ ) ++
heading3 (heading participle_Parameter) ++ heading3 (heading participle_Parameter) ++
frameTable ( frameTable (
tr (intagAttr "th" "rowspan=2" (heading present_Parameter) ++ tr (intagAttr "th" "rowspan=2" (heading present_Parameter) ++
th (heading active_Parameter) ++ th (heading active_Parameter) ++
td (vfin (PresPartAct (AN (NCase Sg Nom))))) ++ td (vfin (PresPartAct (AN (NCase Sg Nom))))) ++
tr (th (heading passive_Parameter) ++ tr (th (heading passive_Parameter) ++
td (vfin (PresPartPass (AN (NCase Sg Nom))))) ++ td (vfin (PresPartPass (AN (NCase Sg Nom))))) ++
tr (intagAttr "th" "rowspan=2" (heading perfect_Parameter) ++ tr (intagAttr "th" "rowspan=2" (heading perfect_Parameter) ++
th (heading active_Parameter) ++ th (heading active_Parameter) ++
td (vfin (PastPartAct (AN (NCase Sg Nom))))) ++ td (vfin (PastPartAct (AN (NCase Sg Nom))))) ++
tr (th (heading passive_Parameter) ++ tr (th (heading passive_Parameter) ++
td (vfin (PastPartPass (AN (NCase Sg Nom))))) ++ td (vfin (PastPartPass (AN (NCase Sg Nom))))) ++
tr (intagAttr "th" "colspan=2" (heading agent_Parameter) ++ tr (intagAttr "th" "colspan=2" (heading agent_Parameter) ++
td (vfin (AgentPart (AN (NCase Sg Nom))))) td (vfin (AgentPart (AN (NCase Sg Nom)))))
) ; ) ;
inflNoun : (NForm -> Str) -> Str = \nouns -> inflNoun : (NForm -> Str) -> Str = \nouns ->
frameTable ( frameTable (
tr (th "" ++ th (heading singular_Parameter) ++ th (heading plural_Parameter) ) ++ tr (th "" ++ th (heading singular_Parameter) ++ th (heading plural_Parameter) ) ++
tr (th (heading nominative_Parameter) ++ td (nouns (NCase Sg Nom)) ++ td (nouns (NCase Pl Nom))) ++ tr (th (heading nominative_Parameter) ++ td (nouns (NCase Sg Nom)) ++ td (nouns (NCase Pl Nom))) ++
tr (th (heading genitive_Parameter) ++ td (nouns (NCase Sg Gen)) ++ td (nouns (NCase Pl Gen))) ++ tr (th (heading genitive_Parameter) ++ td (nouns (NCase Sg Gen)) ++ td (nouns (NCase Pl Gen))) ++
@@ -287,7 +287,7 @@ oper
tr (th (heading allative_Parameter) ++ td (nouns (NCase Sg Allat)) ++ td (nouns (NCase Pl Allat))) ++ tr (th (heading allative_Parameter) ++ td (nouns (NCase Sg Allat)) ++ td (nouns (NCase Pl Allat))) ++
tr (th (heading abessive_Parameter) ++ td (nouns (NCase Sg Abess)) ++ td (nouns (NCase Pl Abess))) ++ tr (th (heading abessive_Parameter) ++ td (nouns (NCase Sg Abess)) ++ td (nouns (NCase Pl Abess))) ++
tr (th (heading comitative_Parameter) ++ td "" ++ td (nouns (NComit))) ++ tr (th (heading comitative_Parameter) ++ td "" ++ td (nouns (NComit))) ++
tr (th (heading instructive_Parameter) ++ td "" ++ td (nouns (NInstruct))) tr (th (heading instructive_Parameter) ++ td "" ++ td (nouns (NInstruct)))
) ; ) ;
lin lin
@@ -300,6 +300,6 @@ lin
MkTag i = ss (i.t) ; MkTag i = ss (i.t) ;
{- --# notpresent {- --# notpresent
-} -}
} }

View File

@@ -165,11 +165,11 @@ lin
PassVPSlash vp = S.passVP vp vp.c2 ; PassVPSlash vp = S.passVP vp vp.c2 ;
PassAgentVPSlash vp np = { PassAgentVPSlash vp np = {
s = {s = vp.s.s ; h = vp.s.h ; p = vp.s.p ; sc = npform2subjcase vp.c2.c} ; s = {s = vp.s.s ; h = vp.s.h ; p = vp.s.p ; sc = npform2subjcase vp.c2.c} ;
s2 = \\b,p,a => np.s ! NPSep ++ vp.s2 ! b ! p ! a ; s2 = \\b,p,a => np.s ! NPSep ++ vp.s2 ! b ! p ! a ;
adv = vp.adv ; adv = vp.adv ;
ext = vp.ext ; ext = vp.ext ;
vptyp = vp.vptyp ; vptyp = vp.vptyp ;
} ; } ;
} }

View File

@@ -1,21 +1,21 @@
--# -path=.:abstract:common:prelude --# -path=.:abstract:common:prelude
concrete ExtraFin of ExtraFinAbs = CatFin ** concrete ExtraFin of ExtraFinAbs = CatFin **
open ResFin, MorphoFin, Coordination, Prelude, NounFin, VerbFin, StructuralFin, StemFin, (R = ParamX) in { open ResFin, MorphoFin, Coordination, Prelude, NounFin, VerbFin, StructuralFin, StemFin, (R = ParamX) in {
flags coding=utf8 ; flags coding=utf8 ;
lin lin
GenNP np = { GenNP np = {
s1,sp = \\_,_ => np.s ! NPCase Gen ; s1,sp = \\_,_ => np.s ! NPCase Gen ;
s2 = case np.isPron of { -- "isän auto", "hänen autonsa" s2 = case np.isPron of { -- "isän auto", "hänen autonsa"
True => table {Front => BIND ++ possSuffixFront np.a ; True => table {Front => BIND ++ possSuffixFront np.a ;
Back => BIND ++ possSuffix np.a } ; Back => BIND ++ possSuffix np.a } ;
False => \\_ => [] False => \\_ => []
} ; } ;
isNum = False ; isNum = False ;
isPoss = np.isPron ; --- also gives "sen autonsa" isPoss = np.isPron ; --- also gives "sen autonsa"
isDef = True ; --- "Jussin kolme autoa ovat" ; thus "...on" is missing isDef = True ; --- "Jussin kolme autoa ovat" ; thus "...on" is missing
isNeg = False isNeg = False
} ; } ;
GenIP ip = {s = \\_,_ => ip.s ! NPCase Gen} ; GenIP ip = {s = \\_,_ => ip.s ! NPCase Gen} ;
@@ -24,8 +24,8 @@ concrete ExtraFin of ExtraFinAbs = CatFin **
h = n2.h } ; h = n2.h } ;
GenRP num cn = { GenRP num cn = {
s = \\n,c => let k = npform2case num.n c in relPron ! n ! Gen ++ cn.s ! NCase num.n k ; s = \\n,c => let k = npform2case num.n c in relPron ! n ! Gen ++ cn.s ! NCase num.n k ;
a = RNoAg a = RNoAg
--- a = RAg (agrP3 num.n) --- a = RAg (agrP3 num.n)
} ; } ;
@@ -38,18 +38,18 @@ concrete ExtraFin of ExtraFinAbs = CatFin **
MkVPI vp = {s = \\i => infVP SCNom Pos (agrP3 Sg) vp (vvtype2infform i)} ; MkVPI vp = {s = \\i => infVP SCNom Pos (agrP3 Sg) vp (vvtype2infform i)} ;
ConjVPI = conjunctDistrTable VVType ; ConjVPI = conjunctDistrTable VVType ;
ComplVPIVV vv vpi = ComplVPIVV vv vpi =
insertObj (\\_,_,_ => vpi.s ! vv.vi) (predSV vv) ; insertObj (\\_,_,_ => vpi.s ! vv.vi) (predSV vv) ;
lincat lincat
VPS = { VPS = {
s : Agr => Str ; s : Agr => Str ;
sc : SubjCase ; --- can be different for diff parts sc : SubjCase ; --- can be different for diff parts
h : Harmony --- can be different for diff parts h : Harmony --- can be different for diff parts
} ; } ;
[VPS] = { [VPS] = {
s1,s2 : Agr => Str ; s1,s2 : Agr => Str ;
sc : SubjCase ; --- take the first: minä osaan kutoa ja täytyy virkata sc : SubjCase ; --- take the first: minä osaan kutoa ja täytyy virkata
h : Harmony --- take the first: osaanko minä kutoa ja käyn koulua h : Harmony --- take the first: osaanko minä kutoa ja käyn koulua
} ; } ;
@@ -86,38 +86,38 @@ concrete ExtraFin of ExtraFinAbs = CatFin **
s = subjForm np vps.sc Pos ++ vps.s ! np.a s = subjForm np vps.sc Pos ++ vps.s ! np.a
} ; } ;
AdvExistNP adv np = AdvExistNP adv np =
mkClause (\_ -> adv.s) np.a (insertObj mkClause (\_ -> adv.s) np.a (insertObj
(\\_,b,_ => np.s ! NPSep) (predV vpVerbOlla)) ; (\\_,b,_ => np.s ! NPSep) (predV vpVerbOlla)) ;
RelExistNP prep rp np = { RelExistNP prep rp np = {
s = \\t,ant,bo,ag => s = \\t,ant,bo,ag =>
let let
n = complNumAgr ag ; n = complNumAgr ag ;
cl = mkClause cl = mkClause
(\_ -> appCompl True Pos prep (rp2np n rp)) (\_ -> appCompl True Pos prep (rp2np n rp))
np.a np.a
(insertObj (insertObj
(\\_,b,_ => np.s ! NPSep) (\\_,b,_ => np.s ! NPSep)
(predV vpVerbOlla)) ; (predV vpVerbOlla)) ;
in in
cl.s ! t ! ant ! bo ! SDecl ; cl.s ! t ! ant ! bo ! SDecl ;
c = NPCase Nom c = NPCase Nom
} ; } ;
AdvPredNP adv v np = AdvPredNP adv v np =
mkClause (\_ -> adv.s) np.a (insertObj mkClause (\_ -> adv.s) np.a (insertObj
(\\_,b,_ => subjForm np v.sc b) (predSV v)) ; (\\_,b,_ => subjForm np v.sc b) (predSV v)) ;
ICompExistNP adv np = ICompExistNP adv np =
let cl = mkClause (\_ -> adv.s ! np.a) np.a (insertObj let cl = mkClause (\_ -> adv.s ! np.a) np.a (insertObj
(\\_,b,_ => np.s ! NPSep) (predV vpVerbOlla)) ; (\\_,b,_ => np.s ! NPSep) (predV vpVerbOlla)) ;
in { in {
s = \\t,a,p => cl.s ! t ! a ! p ! SDecl s = \\t,a,p => cl.s ! t ! a ! p ! SDecl
} ; } ;
IAdvPredNP iadv v np = IAdvPredNP iadv v np =
let cl = mkClause (\_ -> iadv.s) np.a (insertObj let cl = mkClause (\_ -> iadv.s) np.a (insertObj
(\\_,b,_ => np.s ! subjcase2npform v.sc) (predSV v)) ; (\\_,b,_ => np.s ! subjcase2npform v.sc) (predSV v)) ;
in { in {
s = \\t,a,p => cl.s ! t ! a ! p ! SDecl s = \\t,a,p => cl.s ! t ! a ! p ! SDecl
@@ -132,26 +132,26 @@ concrete ExtraFin of ExtraFinAbs = CatFin **
n = Sg n = Sg
} ; } ;
PartCN cn = PartCN cn =
let let
acn = DetCN (DetQuant IndefArt NumSg) cn acn = DetCN (DetQuant IndefArt NumSg) cn
in { in {
s = table { s = table {
NPCase Nom | NPAcc => acn.s ! NPCase ResFin.Part ; NPCase Nom | NPAcc => acn.s ! NPCase ResFin.Part ;
c => acn.s ! c c => acn.s ! c
} ; } ;
a = acn.a ; a = acn.a ;
isPron = False ; isNeg = False isPron = False ; isNeg = False
} ; } ;
PartPlCN cn = PartPlCN cn =
let let
acn = DetCN (DetQuant IndefArt NumPl) cn acn = DetCN (DetQuant IndefArt NumPl) cn
in { in {
s = table { s = table {
NPCase Nom | NPAcc => acn.s ! NPCase ResFin.Part ; NPCase Nom | NPAcc => acn.s ! NPCase ResFin.Part ;
c => acn.s ! c c => acn.s ! c
} ; } ;
a = acn.a ; a = acn.a ;
isPron = False ; isNeg = False isPron = False ; isNeg = False
} ; } ;
@@ -167,7 +167,7 @@ concrete ExtraFin of ExtraFinAbs = CatFin **
---- copied from VerbFin.CompAP, should be shared ---- copied from VerbFin.CompAP, should be shared
ICompAP ap = { ICompAP ap = {
s = \\agr => s = \\agr =>
let let
n = complNumAgr agr ; n = complNumAgr agr ;
c = case n of { c = case n of {
@@ -181,7 +181,7 @@ concrete ExtraFin of ExtraFinAbs = CatFin **
ProDrop p = { ProDrop p = {
s = table {NPCase Nom => [] ; c => p.s ! c} ; s = table {NPCase Nom => [] ; c => p.s ! c} ;
poss = [] ; poss = [] ;
-- drop Gen only works in adjectival position: "autoni", but not in "ø täytyy mennä" -- drop Gen only works in adjectival position: "autoni", but not in "ø täytyy mennä"
a = p.a ; a = p.a ;
hasPoss = p.hasPoss ; hasPoss = p.hasPoss ;
@@ -191,7 +191,7 @@ concrete ExtraFin of ExtraFinAbs = CatFin **
s1 = \\_,_ => case p.a of {Ag _ P3 => p.s ! NPCase Gen ; _ => []} ; -- hänen nimensä ; (minun) nimeni s1 = \\_,_ => case p.a of {Ag _ P3 => p.s ! NPCase Gen ; _ => []} ; -- hänen nimensä ; (minun) nimeni
sp = \\_,_ => p.s ! NPCase Gen ; sp = \\_,_ => p.s ! NPCase Gen ;
s2 = case p.hasPoss of { s2 = case p.hasPoss of {
True => table {Front => BIND ++ possSuffixFront p.a ; True => table {Front => BIND ++ possSuffixFront p.a ;
Back => BIND ++ possSuffix p.a } ; Back => BIND ++ possSuffix p.a } ;
False => \\_ => [] -- sen nimi False => \\_ => [] -- sen nimi
} ; } ;
@@ -201,53 +201,53 @@ concrete ExtraFin of ExtraFinAbs = CatFin **
isNeg = False isNeg = False
} ; } ;
lincat lincat
ClPlus, ClPlusObj, ClPlusAdv = ClausePlus ; ClPlus, ClPlusObj, ClPlusAdv = ClausePlus ;
Part = {s : Harmony => Str} ; Part = {s : Harmony => Str} ;
lin lin
S_SVO part t p clp = S_SVO part t p clp =
let let
cl = clp.s ! t.t ! t.a ! p.p ; cl = clp.s ! t.t ! t.a ! p.p ;
pa = part.s ! Back ---- pa = part.s ! Back ----
in in
{s = t.s ++ p.s ++ cl.subj ++ pa ++ cl.fin ++ cl.inf ++ cl.compl ++ cl.adv ++ cl.ext} ; {s = t.s ++ p.s ++ cl.subj ++ pa ++ cl.fin ++ cl.inf ++ cl.compl ++ cl.adv ++ cl.ext} ;
S_OSV part t p clp = S_OSV part t p clp =
let let
cl = clp.s ! t.t ! t.a ! p.p ; cl = clp.s ! t.t ! t.a ! p.p ;
pa = part.s ! Back ---- pa = part.s ! Back ----
in in
{s = t.s ++ p.s ++ cl.compl ++ pa ++ cl.subj ++ cl.fin ++ cl.inf ++ cl.adv ++ cl.ext} ; {s = t.s ++ p.s ++ cl.compl ++ pa ++ cl.subj ++ cl.fin ++ cl.inf ++ cl.adv ++ cl.ext} ;
S_VSO part t p clp = S_VSO part t p clp =
let let
cl = clp.s ! t.t ! t.a ! p.p ; cl = clp.s ! t.t ! t.a ! p.p ;
pa = part.s ! cl.h pa = part.s ! cl.h
in in
{s = t.s ++ p.s ++ cl.fin ++ pa ++ cl.subj ++ cl.inf ++ cl.compl ++ cl.adv ++ cl.ext} ; {s = t.s ++ p.s ++ cl.fin ++ pa ++ cl.subj ++ cl.inf ++ cl.compl ++ cl.adv ++ cl.ext} ;
S_ASV part t p clp = S_ASV part t p clp =
let let
cl = clp.s ! t.t ! t.a ! p.p ; cl = clp.s ! t.t ! t.a ! p.p ;
pa = part.s ! cl.h pa = part.s ! cl.h
in in
{s = t.s ++ p.s ++ cl.adv ++ pa ++ cl.subj ++ cl.fin ++ cl.inf ++ cl.compl ++ cl.ext} ; {s = t.s ++ p.s ++ cl.adv ++ pa ++ cl.subj ++ cl.fin ++ cl.inf ++ cl.compl ++ cl.ext} ;
S_OVS part t p clp = S_OVS part t p clp =
let let
cl = clp.s ! t.t ! t.a ! p.p ; cl = clp.s ! t.t ! t.a ! p.p ;
pa = part.s ! Back ---- pa = part.s ! Back ----
in in
{s = t.s ++ p.s ++ cl.compl ++ pa ++ cl.fin ++ cl.inf ++ cl.subj ++ cl.adv ++ cl.ext} ; {s = t.s ++ p.s ++ cl.compl ++ pa ++ cl.fin ++ cl.inf ++ cl.subj ++ cl.adv ++ cl.ext} ;
PredClPlus np vp = mkClausePlus (subjForm np vp.s.sc) np.a vp ; PredClPlus np vp = mkClausePlus (subjForm np vp.s.sc) np.a vp ;
PredClPlusFocSubj np vp = insertKinClausePlus 0 (mkClausePlus (subjForm np vp.s.sc) np.a vp) ; PredClPlusFocSubj np vp = insertKinClausePlus 0 (mkClausePlus (subjForm np vp.s.sc) np.a vp) ;
PredClPlusFocVerb np vp = insertKinClausePlus 1 (mkClausePlus (subjForm np vp.s.sc) np.a vp) ; PredClPlusFocVerb np vp = insertKinClausePlus 1 (mkClausePlus (subjForm np vp.s.sc) np.a vp) ;
PredClPlusObj np vps obj = PredClPlusObj np vps obj =
insertObjClausePlus 0 False (\\b => appCompl True b vps.c2 obj) (mkClausePlus (subjForm np vps.s.sc) np.a vps) ; insertObjClausePlus 0 False (\\b => appCompl True b vps.c2 obj) (mkClausePlus (subjForm np vps.s.sc) np.a vps) ;
PredClPlusFocObj np vps obj = PredClPlusFocObj np vps obj =
insertObjClausePlus 0 True (\\b => appCompl True b vps.c2 obj) (mkClausePlus (subjForm np vps.s.sc) np.a vps) ; insertObjClausePlus 0 True (\\b => appCompl True b vps.c2 obj) (mkClausePlus (subjForm np vps.s.sc) np.a vps) ;
PredClPlusAdv np vp adv = PredClPlusAdv np vp adv =
insertObjClausePlus 1 False (\\_ => adv.s) (mkClausePlus (subjForm np vp.s.sc) np.a vp) ; insertObjClausePlus 1 False (\\_ => adv.s) (mkClausePlus (subjForm np vp.s.sc) np.a vp) ;
PredClPlusFocAdv np vp adv = PredClPlusFocAdv np vp adv =
insertObjClausePlus 1 True (\\_ => adv.s) (mkClausePlus (subjForm np vp.s.sc) np.a vp) ; insertObjClausePlus 1 True (\\_ => adv.s) (mkClausePlus (subjForm np vp.s.sc) np.a vp) ;
ClPlusWithObj c = c ; ClPlusWithObj c = c ;
@@ -267,7 +267,7 @@ concrete ExtraFin of ExtraFinAbs = CatFin **
{- ----- {- -----
s = \\vif,ant,pol,agr => case vif of { s = \\vif,ant,pol,agr => case vif of {
VIFin t => vp.s ! VIPass t ! ant ! pol ! agr ; VIFin t => vp.s ! VIPass t ! ant ! pol ! agr ;
_ => vp.s ! vif ! ant ! pol ! agr _ => vp.s ! vif ! ant ! pol ! agr
} ; } ;
-} -}
@@ -278,12 +278,12 @@ concrete ExtraFin of ExtraFinAbs = CatFin **
---- TODO: agr should be to the agent ---- TODO: agr should be to the agent
PassAgentVPSlash vp np = { PassAgentVPSlash vp np = {
s = {s = vp.s.s ; h = vp.s.h ; p = vp.s.p ; sc = npform2subjcase vp.c2.c} ; s = {s = vp.s.s ; h = vp.s.h ; p = vp.s.p ; sc = npform2subjcase vp.c2.c} ;
s2 = \\b,p,a => np.s ! NPSep ++ vp.s2 ! b ! p ! a ; s2 = \\b,p,a => np.s ! NPSep ++ vp.s2 ! b ! p ! a ;
adv = vp.adv ; adv = vp.adv ;
ext = vp.ext ; ext = vp.ext ;
vptyp = vp.vptyp ; vptyp = vp.vptyp ;
} ; } ;
AdjAsCN ap = { AdjAsCN ap = {
@@ -305,13 +305,13 @@ concrete ExtraFin of ExtraFinAbs = CatFin **
quant : NounFin.Quant = lin Quant { -- possessive pronoun with suffix only quant : NounFin.Quant = lin Quant { -- possessive pronoun with suffix only
s2 : Harmony => Str = \\harm => possSuffixGen harm agr ; s2 : Harmony => Str = \\harm => possSuffixGen harm agr ;
s1,sp = \\_,_ => [] ; isNum,isNeg = False ; isPoss,isDef = True s1,sp = \\_,_ => [] ; isNum,isNeg = False ; isPoss,isDef = True
} ; } ;
det = NounFin.DetQuant quant num det = NounFin.DetQuant quant num
in in
(NounFin.DetCN det cn).s ! npf ; (NounFin.DetCN det cn).s ! npf ;
isPron = False isPron = False
} ; } ;
}
}

View File

@@ -61,7 +61,7 @@ abstract ExtraFinAbs = Extra [
ClPlusWithObj : ClPlusObj -> ClPlus ; -- to make non-fronted obj focusable ClPlusWithObj : ClPlusObj -> ClPlus ; -- to make non-fronted obj focusable
ClPlusWithAdv : ClPlusAdv -> ClPlus ; -- to make non-fronted adv focusable ClPlusWithAdv : ClPlusAdv -> ClPlus ; -- to make non-fronted adv focusable
noPart, han_Part, pa_Part, pas_Part, ko_Part, kos_Part, noPart, han_Part, pa_Part, pas_Part, ko_Part, kos_Part,
kohan_Part, pahan_Part : Part ; kohan_Part, pahan_Part : Part ;
} }

View File

@@ -1,8 +1,8 @@
--# -path=.:../abstract:../common:prelude --# -path=.:../abstract:../common:prelude
concrete GrammarFin of Grammar = concrete GrammarFin of Grammar =
NounFin, NounFin,
VerbFin, VerbFin,
AdjectiveFin, AdjectiveFin,
AdverbFin, AdverbFin,
NumeralFin, NumeralFin,

View File

@@ -4,20 +4,20 @@ concrete IdiomFin of Idiom = CatFin **
flags optimize=all_subs ; coding=utf8; flags optimize=all_subs ; coding=utf8;
lin lin
ExistNP np = ExistNP np =
let let
cas : Polarity -> NPForm = \p -> case p of { cas : Polarity -> NPForm = \p -> case p of {
Pos => NPSep ; -- on olemassa luku Pos => NPSep ; -- on olemassa luku
Neg => NPCase Part -- ei ole olemassa lukua Neg => NPCase Part -- ei ole olemassa lukua
} }
in in
mkClause noSubj (agrP3 Sg) (insertObj mkClause noSubj (agrP3 Sg) (insertObj
(\\_,b,_ => "olemassa" ++ np.s ! cas b) (predV olla)) ; (\\_,b,_ => "olemassa" ++ np.s ! cas b) (predV olla)) ;
ExistIP ip = ExistIP ip =
let let
cas : SubjCase = SCNom ; ---- also partitive in Extra cas : SubjCase = SCNom ; ---- also partitive in Extra
vp = insertObj (\\_,b,_ => "olemassa") (predV olla) ; vp = insertObj (\\_,b,_ => "olemassa") (predV olla) ;
cl = mkClause (subjForm (ip ** {isPron = False ; a = agrP3 ip.n}) cas) (agrP3 ip.n) vp cl = mkClause (subjForm (ip ** {isPron = False ; a = agrP3 ip.n}) cas) (agrP3 ip.n) vp
in { in {
s = \\t,a,p => cl.s ! t ! a ! p ! SDecl s = \\t,a,p => cl.s ! t ! a ! p ! SDecl
@@ -25,13 +25,13 @@ concrete IdiomFin of Idiom = CatFin **
-- Notice the nominative in the cleft $NP$: "se on Matti josta Liisa pitää" -- Notice the nominative in the cleft $NP$: "se on Matti josta Liisa pitää"
CleftNP np rs = mkClause (\_ -> "se") (agrP3 Sg) CleftNP np rs = mkClause (\_ -> "se") (agrP3 Sg)
(insertExtrapos (rs.s ! np.a) (insertExtrapos (rs.s ! np.a)
(insertObj (\\_,_,_ => np.s ! NPSep) (predV olla))) ; (insertObj (\\_,_,_ => np.s ! NPSep) (predV olla))) ;
-- This gives the almost forbidden "se on Porissa kun Matti asuu". -- This gives the almost forbidden "se on Porissa kun Matti asuu".
CleftAdv ad s = mkClause (\_ -> "se") (agrP3 Sg) CleftAdv ad s = mkClause (\_ -> "se") (agrP3 Sg)
(insertExtrapos ("kun" ++ s.s) (insertExtrapos ("kun" ++ s.s)
(insertObj (\\_,_,_ => ad.s) (predV olla))) ; (insertObj (\\_,_,_ => ad.s) (predV olla))) ;
@@ -39,8 +39,8 @@ concrete IdiomFin of Idiom = CatFin **
GenericCl vp = mkClausePol vp.vptyp.isNeg noSubj (agrP3 Sg) (passVP vp (casePrep nominative)) ; GenericCl vp = mkClausePol vp.vptyp.isNeg noSubj (agrP3 Sg) (passVP vp (casePrep nominative)) ;
ProgrVP vp = ProgrVP vp =
let let
inf = (sverb2verbSep vp.s).s ! Inf Inf3Iness ; inf = (sverb2verbSep vp.s).s ! Inf Inf3Iness ;
on = predV olla on = predV olla
in { in {
@@ -51,14 +51,14 @@ concrete IdiomFin of Idiom = CatFin **
vptyp = vp.vptyp ; vptyp = vp.vptyp ;
} ; } ;
ImpPl1 vp = ImpPl1 vp =
let vps = (sverb2verbSep vp.s).s ! ImperP1Pl let vps = (sverb2verbSep vp.s).s ! ImperP1Pl
in in
{s = vps ++ {s = vps ++
vp.s2 ! True ! Pos ! Ag Pl P1 ++ vp.adv ! Pos ++ vp.ext vp.s2 ! True ! Pos ! Ag Pl P1 ++ vp.adv ! Pos ++ vp.ext
} ; } ;
ImpP3 np vp = ImpP3 np vp =
let vps = (sverb2verbSep vp.s).s ! ImperP3 (verbAgr np.a).n let vps = (sverb2verbSep vp.s).s ! ImperP3 (verbAgr np.a).n
in in
{s = np.s ! subjcase2npform vp.s.sc ++ vps ++ {s = np.s ! subjcase2npform vp.s.sc ++ vps ++
@@ -75,11 +75,11 @@ concrete IdiomFin of Idiom = CatFin **
} ; } ;
ExistNPAdv np adv = ExistNPAdv np adv =
mkClausePol np.isNeg (\_ -> adv.s) np.a (insertObj mkClausePol np.isNeg (\_ -> adv.s) np.a (insertObj
(\\_,b,_ => np.s ! NPSep) (predV vpVerbOlla)) ; (\\_,b,_ => np.s ! NPSep) (predV vpVerbOlla)) ;
ExistIPAdv ip adv = ExistIPAdv ip adv =
let let
c = case ip.n of {Sg => Nom ; Pl => Part} ; c = case ip.n of {Sg => Nom ; Pl => Part} ;
cl = mkClause (\_ -> ip.s ! NPCase c ++ adv.s) (agrP3 Sg) -- kuka täällä on ; keitä täällä on cl = mkClause (\_ -> ip.s ! NPCase c ++ adv.s) (agrP3 Sg) -- kuka täällä on ; keitä täällä on
(predV vpVerbOlla) ; (predV vpVerbOlla) ;
@@ -92,4 +92,3 @@ concrete IdiomFin of Idiom = CatFin **
noSubj : Polarity -> Str = \_ -> [] ; noSubj : Polarity -> Str = \_ -> [] ;
} }

View File

@@ -1,7 +1,7 @@
kayda_V = kayda_V =
let kay = Predef.tk 2 s ; kavi = init kay + "vi" in let kay = Predef.tk 2 s ; kavi = init kay + "vi" in
vForms12 s (kay + "n") kay (kay + "vät") (kay + "kää") (kay + "dään") vForms12 s (kay + "n") kay (kay + "v<EFBFBD>t") (kay + "k<EFBFBD><EFBFBD>") (kay + "d<EFBFBD><EFBFBD>n")
(kavi + "n") kavi (kavi + "si") (kay + "nyt") (kay + "tty") (kavi + "n") kavi (kavi + "si") (kay + "nyt") (kay + "tty")
(kay + "nee") ; (kay + "nee") ;
tuntea_V = tuntea_V =
@@ -18,4 +18,3 @@ tietaa_V
taitaa_V taitaa_V
siita_V siita_V

View File

@@ -17,7 +17,7 @@ oper
d03 : Str -> NForms -- 481 ääntiö d03 : Str -> NForms -- 481 ääntiö
= \s -> dSilakka s (s + "n") (s + "it" + vowelHarmony s) ; = \s -> dSilakka s (s + "n") (s + "it" + vowelHarmony s) ;
d04A : Str -> NForms -- 273 äpärikkö d04A : Str -> NForms -- 273 äpärikkö
= \s -> let ws = weakGrade s in = \s -> let ws = weakGrade s in
dSilakka s (ws + "n") (ws + "it" + getHarmony (last s)) ; dSilakka s (ws + "n") (ws + "it" + getHarmony (last s)) ;
d05 : Str -> NForms -- 3212 öljymaali d05 : Str -> NForms -- 3212 öljymaali
= \s -> case last s of { = \s -> case last s of {
@@ -37,7 +37,7 @@ oper
d08A : Str -> NForms -- 5 vinaigrette d08A : Str -> NForms -- 5 vinaigrette
= \s -> dNukke s (weakGrade s + "n") ; = \s -> dNukke s (weakGrade s + "n") ;
d09 : Str -> NForms -- 696 ääriraja d09 : Str -> NForms -- 696 ääriraja
= \s -> let a = last s in dSilakka s = \s -> let a = last s in dSilakka s
(s + "n") (s + "n")
(init s + case a of {"a" => "o" ; _ => "ö"} + "j" + a) ; (init s + case a of {"a" => "o" ; _ => "ö"} + "j" + a) ;
d09A : Str -> NForms -- 1040 ääniraita d09A : Str -> NForms -- 1040 ääniraita
@@ -45,7 +45,7 @@ oper
x + "aaka" => dSilakka s (x+"aa'an") (x+"aakoja") ; x + "aaka" => dSilakka s (x+"aa'an") (x+"aakoja") ;
x + "aika" => dSilakka s (x+"ajan") (x+"aikoja") ; -- lots of compound words in NewDictFin that end in aika, but are not analysed as compounds x + "aika" => dSilakka s (x+"ajan") (x+"aikoja") ; -- lots of compound words in NewDictFin that end in aika, but are not analysed as compounds
_ => let a = last s _ => let a = last s
in dSilakka s in dSilakka s
(weakGrade s + "n") (weakGrade s + "n")
(init s + case a of {"a" => "o" ; _ => "ö"} + "j" + a) (init s + case a of {"a" => "o" ; _ => "ö"} + "j" + a)
} ; } ;
@@ -59,21 +59,21 @@ oper
d11 : Str -> NForms -- 46 ödeema d11 : Str -> NForms -- 46 ödeema
= \s -> dSilakka s (weakGrade s + "n") (init s + "i" + vowelHarmony (last s)) ; = \s -> dSilakka s (weakGrade s + "n") (init s + "i" + vowelHarmony (last s)) ;
d12 : Str -> NForms -- 1125 örinä d12 : Str -> NForms -- 1125 örinä
= \s -> let a = vowelHarmony (last s) in = \s -> let a = vowelHarmony (last s) in
dSilakka s (s + "n") dSilakka s (s + "n")
(init s + case a of {"a" => "o" ; _ => "ö"} + "it" + a) ; (init s + case a of {"a" => "o" ; _ => "ö"} + "it" + a) ;
d13 : Str -> NForms -- 157 virtaska d13 : Str -> NForms -- 157 virtaska
= \s -> let a = vowelHarmony (last s) in = \s -> let a = vowelHarmony (last s) in
dSilakka s (s + "n") dSilakka s (s + "n")
(init s + case a of {"a" => "o" ; _ => "ö"} + "j" + a) ; (init s + case a of {"a" => "o" ; _ => "ö"} + "j" + a) ;
d14A : Str -> NForms -- 244 ötökkä d14A : Str -> NForms -- 244 ötökkä
= \s -> let a = vowelHarmony (last s) ; ws = weakGrade s in = \s -> let a = vowelHarmony (last s) ; ws = weakGrade s in
dSilakka s (ws + "n") dSilakka s (ws + "n")
(init ws + case a of {"a" => "o" ; _ => "ö"} + "it" + a) ; (init ws + case a of {"a" => "o" ; _ => "ö"} + "it" + a) ;
d15 : Str -> NForms -- 170 äreä d15 : Str -> NForms -- 170 äreä
= dKorkea ; = dKorkea ;
d16 : Str -> NForms -- 2 kumpikin --? d16 : Str -> NForms -- 2 kumpikin --?
= \s -> let kumpi = Predef.take 5 s ; kin = Predef.drop 5 s in = \s -> let kumpi = Predef.take 5 s ; kin = Predef.drop 5 s in
\\i => (dSuurempi kumpi ! i + kin) ; \\i => (dSuurempi kumpi ! i + kin) ;
d16A : Str -> NForms -- 20 ylempi d16A : Str -> NForms -- 20 ylempi
= dSuurempi ; = dSuurempi ;
@@ -106,13 +106,13 @@ oper
d28A : Str -> NForms -- 1 jälsi d28A : Str -> NForms -- 1 jälsi
= \s -> dArpi s (Predef.tk 2 s + "len") ; = \s -> dArpi s (Predef.tk 2 s + "len") ;
d29 : Str -> NForms -- 1 lapsi d29 : Str -> NForms -- 1 lapsi
= \s -> let lapsi = dArpi s (init s + "en") ; a = vowHarmony s in = \s -> let lapsi = dArpi s (init s + "en") ; a = vowHarmony s in
table {2 => Predef.tk 3 s + "st" + a ; i => lapsi ! i} ; table {2 => Predef.tk 3 s + "st" + a ; i => lapsi ! i} ;
d30 : Str -> NForms -- 2 veitsi d30 : Str -> NForms -- 2 veitsi
= \s -> let lapsi = dArpi s (init s + "en") ; a = vowHarmony s in = \s -> let lapsi = dArpi s (init s + "en") ; a = vowHarmony s in
table {2 => Predef.tk 3 s + "st" + a ; i => lapsi ! i} ; table {2 => Predef.tk 3 s + "st" + a ; i => lapsi ! i} ;
d31 : Str -> NForms -- 3 yksi d31 : Str -> NForms -- 3 yksi
= \s -> let = \s -> let
y = Predef.tk 3 s ; y = Predef.tk 3 s ;
a = vowelHarmony y a = vowelHarmony y
in nForms10 in nForms10
@@ -127,7 +127,7 @@ oper
d33A : Str -> NForms -- 181 yllytin d33A : Str -> NForms -- 181 yllytin
= \s -> dLiitin s (strongGrade (init s) + "men") ; = \s -> dLiitin s (strongGrade (init s) + "men") ;
d34 : Str -> NForms -- 1 alaston d34 : Str -> NForms -- 1 alaston
= \s -> let alastom = init s in = \s -> let alastom = init s in
nForms10 nForms10
s (alastom + "an") (s + "ta") (alastom + "ana") (alastom + "aan") s (alastom + "an") (s + "ta") (alastom + "ana") (alastom + "aan")
(alastom + "ien") (alastom + "ia") (alastom + "ina") (alastom + "issa") (alastom + "ien") (alastom + "ia") (alastom + "ina") (alastom + "issa")
@@ -143,7 +143,7 @@ oper
d36 : Str -> NForms -- 11 ylin d36 : Str -> NForms -- 11 ylin
= dSuurin ; = dSuurin ;
d37 : Str -> NForms -- 1 vasen d37 : Str -> NForms -- 1 vasen
= \s -> let vasem = init s + "m" in = \s -> let vasem = init s + "m" in
nForms10 nForms10
s (vasem + "man") (s + "ta") (vasem + "pana") (vasem + "paan") s (vasem + "man") (s + "ta") (vasem + "pana") (vasem + "paan")
(vasem + "pien") (vasem + "pia") (vasem + "pina") (vasem + "missa") (vasem + "pien") (vasem + "pia") (vasem + "pina") (vasem + "missa")
@@ -159,7 +159,7 @@ oper
d41A : Str -> NForms -- 401 öljykangas d41A : Str -> NForms -- 401 öljykangas
= \s -> let is = init s in dRae s (strongGrade is + last is + "n") ; = \s -> let is = init s in dRae s (strongGrade is + last is + "n") ;
d42 : Str -> NForms -- 1 mies d42 : Str -> NForms -- 1 mies
= \s -> let mieh = init s + "h" in = \s -> let mieh = init s + "h" in
nForms10 nForms10
s (mieh + "en") (s + "tä") (mieh + "enä") (mieh + "een") s (mieh + "en") (s + "tä") (mieh + "enä") (mieh + "een")
(s + "ten") (mieh + "iä") (mieh + "inä") (mieh + "issä") (s + "ten") (mieh + "iä") (mieh + "inä") (mieh + "issä")
@@ -169,19 +169,19 @@ oper
d43A : Str -> NForms -- 1 immyt d43A : Str -> NForms -- 1 immyt
= \s -> dRae s (strongGrade (init s) + "en") ; = \s -> dRae s (strongGrade (init s) + "en") ;
d44 : Str -> NForms -- 1 kevät d44 : Str -> NForms -- 1 kevät
= \s -> let kevä = init s in = \s -> let kevä = init s in
nForms10 nForms10
s (kevä + "än") (s + "tä") (kevä + "änä") (kevä + "äseen") s (kevä + "än") (s + "tä") (kevä + "änä") (kevä + "äseen")
(s + "iden") (kevä + "itä") (kevä + "inä") (kevä + "issä") (s + "iden") (kevä + "itä") (kevä + "inä") (kevä + "issä")
(kevä + "isiin") ; (kevä + "isiin") ;
d45 : Str -> NForms -- 23 yhdes d45 : Str -> NForms -- 23 yhdes
= \s -> let yhde = init s ; a = vowelHarmony s in = \s -> let yhde = init s ; a = vowelHarmony s in
nForms10 nForms10
s (yhde + "nnen") (yhde + "tt" + a) (yhde + "nten" + a) (yhde + "nteen") s (yhde + "nnen") (yhde + "tt" + a) (yhde + "nten" + a) (yhde + "nteen")
(yhde + "nsien") (yhde + "nsi" + a) (yhde + "nsin" + a) (yhde + "nsiss" + a) (yhde + "nsien") (yhde + "nsi" + a) (yhde + "nsin" + a) (yhde + "nsiss" + a)
(yhde + "nsiin") ; (yhde + "nsiin") ;
d46 : Str -> NForms -- 1 tuhat d46 : Str -> NForms -- 1 tuhat
= \s -> let tuha = init s ; a = vowelHarmony s in = \s -> let tuha = init s ; a = vowelHarmony s in
nForms10 nForms10
s (tuha + "nnen") (tuha + "tt" + a) (tuha + "nten" + a) (tuha + "nteen") s (tuha + "nnen") (tuha + "tt" + a) (tuha + "nten" + a) (tuha + "nteen")
(tuha + "nsien") (tuha + "nsi" + a) (tuha + "nsin" + a) (tuha + "nsiss" + a) (tuha + "nsien") (tuha + "nsi" + a) (tuha + "nsin" + a) (tuha + "nsiss" + a)
@@ -210,13 +210,13 @@ oper
c52A : Str -> VForms -- 1568 öljyyntyä c52A : Str -> VForms -- 1568 öljyyntyä
= \s -> cHukkua s (weakGrade (init s) + "n") ; = \s -> cHukkua s (weakGrade (init s) + "n") ;
c53 : Str -> VForms -- 605 äänestää c53 : Str -> VForms -- 605 äänestää
= \s -> let ott = Predef.tk 2 s in = \s -> let ott = Predef.tk 2 s in
cOttaa s (init s + "n") (ott + "in") (ott + "i") ; cOttaa s (init s + "n") (ott + "in") (ott + "i") ;
c53A : Str -> VForms -- 2121 örähtää c53A : Str -> VForms -- 2121 örähtää
= \s -> let ota = weakGrade (init s) in = \s -> let ota = weakGrade (init s) in
cOttaa s (ota + "n") (init ota + "in") (Predef.tk 2 s + "i") ; cOttaa s (ota + "n") (init ota + "in") (Predef.tk 2 s + "i") ;
c54 : Str -> VForms -- 2 pieksää c54 : Str -> VForms -- 2 pieksää
= \s -> let ott = Predef.tk 2 s in = \s -> let ott = Predef.tk 2 s in
cOttaa s (init s + "n") (ott + "in") (ott + "i") ; cOttaa s (init s + "n") (ott + "in") (ott + "i") ;
c54A : Str -> VForms -- 316 ääntää c54A : Str -> VForms -- 316 ääntää
= \s -> let ota = weakGrade (init s) ; o = Predef.tk 2 ota in = \s -> let ota = weakGrade (init s) ; o = Predef.tk 2 ota in
@@ -224,7 +224,7 @@ oper
c55A : Str -> VForms -- 7 yltää c55A : Str -> VForms -- 7 yltää
= c54A ; --? diff: variation ylti/ylsi = c54A ; --? diff: variation ylti/ylsi
c56 : Str -> VForms -- 22 valaa c56 : Str -> VForms -- 22 valaa
= \s -> let val = Predef.tk 2 s in = \s -> let val = Predef.tk 2 s in
cOttaa s (init s + "n") (val + "oin") (val + "oi") ; -- never ö cOttaa s (init s + "n") (val + "oin") (val + "oi") ; -- never ö
c56A : Str -> VForms -- 28 virkkaa c56A : Str -> VForms -- 28 virkkaa
= \s -> let ota = weakGrade (init s) ; ot = init ota in = \s -> let ota = weakGrade (init s) ; ot = init ota in
@@ -293,7 +293,7 @@ oper
c75A : Str -> VForms -- 9 siitä c75A : Str -> VForms -- 9 siitä
= \s -> cPudota s (strongGrade (Predef.tk 2 s) + "si") ; = \s -> cPudota s (strongGrade (Predef.tk 2 s) + "si") ;
c76A : Str -> VForms -- 2 tietää c76A : Str -> VForms -- 2 tietää
= \s -> let tieta = init s ; tieda = weakGrade tieta ; ties = Predef.tk 2 tieta + "s" in = \s -> let tieta = init s ; tieda = weakGrade tieta ; ties = Predef.tk 2 tieta + "s" in
cOttaa s (tieda + "n") (ties + "in") (ties + "i") ; -- only tietaa, taitaa cOttaa s (tieda + "n") (ties + "in") (ties + "i") ; -- only tietaa, taitaa
-- defective verbs -- defective verbs
c77 : Str -> VForms -- 3 vipajaa c77 : Str -> VForms -- 3 vipajaa
@@ -309,12 +309,11 @@ oper
= c99 ; -- dummy = c99 ; -- dummy
-- compound nouns, latter part inflected -- compound nouns, latter part inflected
compoundNK : Str -> NForms -> NForms = \x,y -> compoundNK : Str -> NForms -> NForms = \x,y ->
\\v => x + y ! v ; \\v => x + y ! v ;
--- this is a lot slower --- this is a lot slower
fcompoundNK : (Str -> NForms) -> Str -> Str -> NForms = \d,x,y -> fcompoundNK : (Str -> NForms) -> Str -> Str -> NForms = \d,x,y ->
let ys = d y in \\v => x + ys ! v ; let ys = d y in \\v => x + ys ! v ;
} }