diff --git a/src/finnish/AdjectiveFin.gf b/src/finnish/AdjectiveFin.gf index 227695de..69a781bb 100644 --- a/src/finnish/AdjectiveFin.gf +++ b/src/finnish/AdjectiveFin.gf @@ -32,14 +32,14 @@ concrete AdjectiveFin of Adjective = CatFin ** open ResFin, StemFin, Prelude in ComplA2 a np = { - s = \\isMod,af => + s = \\isMod,af => preOrPost isMod (appCompl True Pos a.c2 np) (sAdjFull2nforms Posit a ! af) ; p = [] ; hasPrefix = False } ; ReflA2 a = { - s = \\isMod,af => - preOrPost isMod + s = \\isMod,af => + preOrPost isMod (appCompl True Pos a.c2 (reflPron (agrP3 Sg))) (sAdjFull2nforms Posit a ! af) ; p = [] ; hasPrefix = False } ; diff --git a/src/finnish/AllFin.gf b/src/finnish/AllFin.gf index 041f5714..3d624b5f 100644 --- a/src/finnish/AllFin.gf +++ b/src/finnish/AllFin.gf @@ -1,7 +1,6 @@ --# -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 ExtraFin - [ProDrop, ProDropPoss, S_OSV, S_VSO, S_ASV, AdvExistNP] -- to exclude spurious parses ** open ExtendFin in {} --- to make it compile by default - diff --git a/src/finnish/CatFin.gf b/src/finnish/CatFin.gf index e22517c7..131d671e 100644 --- a/src/finnish/CatFin.gf +++ b/src/finnish/CatFin.gf @@ -22,7 +22,7 @@ concrete CatFin of Cat = CommonX ** open ResFin, StemFin, Prelude in { QCl = {s : ResFin.Tense => Anteriority => Polarity => Str} ; IP = {s : NPForm => Str ; n : Number} ; - IComp = {s : Agr => Str} ; + IComp = {s : Agr => Str} ; IDet = {s : Case => Str ; n : Number ; isNum : Bool} ; IQuant = {s : Number => Case => Str} ; @@ -34,15 +34,15 @@ concrete CatFin of Cat = CommonX ** open ResFin, StemFin, Prelude in { -- Verb VP = StemFin.VP ; - VPSlash = StemFin.VP ** {c2 : Compl} ; - Comp = {s : Agr => Str} ; + VPSlash = StemFin.VP ** {c2 : Compl} ; + Comp = {s : Agr => Str} ; -- Adjective -- The $Bool$ tells whether usage is modifying (as opposed to -- 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 @@ -82,7 +82,7 @@ concrete CatFin of Cat = CommonX ** open ResFin, StemFin, Prelude in { -- Open lexical classes, e.g. Lexicon - V, VS, VQ = SVerb1 ; + V, VS, VQ = SVerb1 ; V2, VA, V2Q, V2S = SVerb1 ** {c2 : Compl} ; V2A = SVerb1 ** {c2, c3 : Compl} ; VV = SVerb1 ** {vi : VVType} ; ---- infinitive form diff --git a/src/finnish/ConjunctionFin.gf b/src/finnish/ConjunctionFin.gf index 9fb39a33..ceeb441e 100644 --- a/src/finnish/ConjunctionFin.gf +++ b/src/finnish/ConjunctionFin.gf @@ -22,7 +22,7 @@ concrete ConjunctionFin of Conjunction = c = ss.c } ; - ConjCN conj ss = + ConjCN conj ss = let s = (conjunctDistrTable NForm conj ss).s in {s = s ; h = Back } ; ---- harmony? diff --git a/src/finnish/ConstructionFin.gf b/src/finnish/ConstructionFin.gf index 75e3ce0f..0d7e3f32 100644 --- a/src/finnish/ConstructionFin.gf +++ b/src/finnish/ConstructionFin.gf @@ -1,6 +1,6 @@ --# -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 { flags coding=utf8 ; @@ -21,10 +21,10 @@ lin 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) ; n_unit_CN card unit cn = mkCN (invarA (SyntaxFin.mkAdv (casePrep genitive) (mkNP (lin CN unit))).s) cn ; - + -- some more things weather_adjCl ap = mkCl (mkVP (lin AP ap)) ; - + is_right_VP = mkVP (ParadigmsFin.mkAdv "oikeassa") ; is_wrong_VP = mkVP (ParadigmsFin.mkAdv "väärässä") ; @@ -37,16 +37,16 @@ lin few_X_short_of_Y np x y = 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) ; olla_V : V = lin V have_V2 ; - in mkS negativePol + in mkS negativePol (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_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") ; come_here_VP = mkVP (mkVP L.come_V) (mkAdv "tänne") ; 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 ; 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)) ; ----- 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} ; +---- 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} ; intYear = symb ; intMonthday = symb ; 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 ; @@ -101,14 +101,14 @@ lin oper mkLanguage : Str -> N = \s -> mkN s ; -oper mkWeekday : Str -> Weekday = \d -> +oper mkWeekday : Str -> Weekday = \d -> lin Weekday { - noun = mkN d ; + noun = mkN d ; habitual = case d of { _ + "i" => ParadigmsFin.mkAdv (d + "sin") ; -- tiistaisin _ => ParadigmsFin.mkAdv (d + "isin") -- keskiviikkoisin } - } ; + } ; lin second_Timeunit = mkN "sekuntti" ; lin minute_Timeunit = mkN "minuutti" ; @@ -126,9 +126,9 @@ lin friday_Weekday = mkWeekday "perjantai" ; lin saturday_Weekday = mkWeekday"lauantai" ; lin sunday_Weekday = mkWeekday "sunnuntai" ; -lin january_Month = mkN "tammikuu" ; -lin february_Month = mkN "helmikuu" ; -lin march_Month = mkN "maaliskuu" ; +lin january_Month = mkN "tammikuu" ; +lin february_Month = mkN "helmikuu" ; +lin march_Month = mkN "maaliskuu" ; lin april_Month = mkN "huhtikuu" ; lin may_Month = mkN "toukokuu" ; lin june_Month = mkN "kesäkuu" ; diff --git a/src/finnish/DocumentationFin.gf b/src/finnish/DocumentationFin.gf index 719fe827..480766e4 100644 --- a/src/finnish/DocumentationFin.gf +++ b/src/finnish/DocumentationFin.gf @@ -2,5 +2,5 @@ -- documentation of Finnish in Finnish: the default introduced in LangFin -concrete DocumentationFin of Documentation = CatFin ** +concrete DocumentationFin of Documentation = CatFin ** DocumentationFinFunctor with (Terminology = TerminologyFin) ; diff --git a/src/finnish/DocumentationFinEng.gf b/src/finnish/DocumentationFinEng.gf index d4bbda68..5098691b 100644 --- a/src/finnish/DocumentationFinEng.gf +++ b/src/finnish/DocumentationFinEng.gf @@ -2,5 +2,5 @@ -- documentation of Finnish in English -concrete DocumentationFinEng of Documentation = CatFin ** +concrete DocumentationFinEng of Documentation = CatFin ** DocumentationFinFunctor with (Terminology = TerminologyEng) ; diff --git a/src/finnish/DocumentationFinFunctor.gf b/src/finnish/DocumentationFinFunctor.gf index 4f2d05e3..f4d183d8 100644 --- a/src/finnish/DocumentationFinFunctor.gf +++ b/src/finnish/DocumentationFinFunctor.gf @@ -1,6 +1,6 @@ --# -path=.:../abstract:../common -incomplete concrete DocumentationFinFunctor of Documentation = CatFin ** open +incomplete concrete DocumentationFinFunctor of Documentation = CatFin ** open Terminology, -- the interface ResFin, StemFin, @@ -34,10 +34,10 @@ lin InflectionA, InflectionA2 = \adj -> { t = "a" ; s1 = heading1 (heading adjective_Category) ; - s2 = inflNoun (\nf -> (snoun2nounSep {s = \\f => adj.s ! Posit ! sAN f ; h = adj.h}).s ! nf) ++ - heading2 (heading comparative_Parameter) ++ - inflNoun (\nf -> (snoun2nounSep {s = \\f => adj.s ! Compar ! sAN f ; h = adj.h}).s ! nf) ++ - heading2 (heading superlative_Parameter) ++ + s2 = inflNoun (\nf -> (snoun2nounSep {s = \\f => adj.s ! Posit ! sAN f ; h = adj.h}).s ! nf) ++ + heading2 (heading comparative_Parameter) ++ + inflNoun (\nf -> (snoun2nounSep {s = \\f => adj.s ! Compar ! sAN f ; h = adj.h}).s ! nf) ++ + heading2 (heading superlative_Parameter) ++ inflNoun (\nf -> (snoun2nounSep {s = \\f => adj.s ! Superl ! sAN f ; h = adj.h}).s ! nf) } ; @@ -55,91 +55,91 @@ lin InflectionV v = { t = "v" ; - s1 = heading1 (heading verb_Category) ++ + s1 = heading1 (heading verb_Category) ++ paragraph (verbExample (S.mkCl S.she_NP v)) ; s2 = inflVerb v } ; InflectionV2 v = { t = "v" ; - s1 = heading1 (heading verb_Category) ++ + s1 = heading1 (heading verb_Category) ++ paragraph (verbExample (S.mkCl S.she_NP v S.something_NP)) ; s2 = inflVerb v } ; InflectionV3 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)) ; s2 = inflVerb v } ; InflectionV2V 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)))) ; s2 = inflVerb v } ; InflectionV2S 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 "...")))) ; s2 = inflVerb v } ; InflectionV2Q 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 "...")))) ; s2 = inflVerb v } ; InflectionV2A 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)) ; s2 = inflVerb v } ; InflectionVV 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)))) ; s2 = inflVerb v } ; InflectionVS v = { t = "v" ; - s1 = heading1 (heading verb_Category) ++ + s1 = heading1 (heading verb_Category) ++ paragraph (verbExample (S.mkCl S.she_NP v (lin S (ss "...")))) ; s2 = inflVerb v } ; InflectionVQ v = { t = "v" ; - s1 = heading1 (heading verb_Category) ++ + s1 = heading1 (heading verb_Category) ++ paragraph (verbExample (S.mkCl S.she_NP v (lin QS (ss "...")))) ; s2 = inflVerb v } ; InflectionVA v = { t = "v" ; - s1 = heading1 (heading verb_Category) ++ + s1 = heading1 (heading verb_Category) ++ paragraph (verbExample (S.mkCl S.she_NP v L.beautiful_A)) ; s2 = inflVerb v } ; -oper +oper verbExample : CatFin.Cl -> Str = \cl -> (S.mkUtt cl).s ; {- -} --# notpresent inflVerb : CatFin.V -> Str = \verb0 -> - let + let verb = sverb2verbSep verb0 ; vfin : ResFin.VForm -> Str = \f -> verb.s ! f ; - + nounNounHeading : Parameter -> Parameter -> Str = \n1,n2 -> (S.mkUtt (G.PossNP (S.mkCN n1) (S.mkNP (snoun2nounSep n2)))).s ; in @@ -149,7 +149,7 @@ oper th (heading singular_Parameter) ++ th (heading plural_Parameter) ++ th (heading passive_Parameter) --# notpresent - ) ++ + ) ++ tr (th "1.p" ++ td (vfin (Presn Sg P1)) ++ td (vfin (Presn Pl P1)) ++ intagAttr "td" "rowspan=3" (vfin (PassPresn True)) --# notpresent ) ++ @@ -164,13 +164,13 @@ oper th (heading singular_Parameter) ++ th (heading plural_Parameter) ++ th (heading passive_Parameter) --# notpresent - ) ++ + ) ++ tr (th "1.p" ++ td (vfin (Impf Sg P1)) ++ td (vfin (Impf Pl P1)) ++ intagAttr "td" "rowspan=3" (vfin (PassImpf True))) ++ 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 (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 (PassImpf False))) ) ++ @@ -180,7 +180,7 @@ oper th (heading singular_Parameter) ++ th (heading plural_Parameter) ++ th (heading passive_Parameter) --# notpresent - ) ++ + ) ++ tr (th "1.p" ++ td (vfin (Condit Sg P1)) ++ td (vfin (Condit Pl P1)) ++ intagAttr "td" "rowspan=3" (vfin (PassCondit True)) --# notpresent ) ++ @@ -195,7 +195,7 @@ oper th (heading singular_Parameter) ++ th (heading plural_Parameter) ++ th (heading passive_Parameter) --# notpresent - ) ++ + ) ++ tr (th "1.p" ++ td (vfin (Potent Sg P1)) ++ td (vfin (Potent Pl P1)) ++ intagAttr "td" "rowspan=3" (vfin (PassPotent True)) --# notpresent ) ++ @@ -210,34 +210,34 @@ oper th (heading singular_Parameter) ++ th (heading plural_Parameter) ++ th (heading passive_Parameter) --# notpresent - ) ++ + ) ++ tr (th "1.p" ++ td "" ++ td (vfin ImperP1Pl) ++ intagAttr "td" "rowspan=3" (vfin (PassImper True))) ++ 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 (heading negative_Parameter) ++ - td (vfin (Imper Sg)) ++ + td (vfin (Imper Sg)) ++ td (vfin ImpNegPl) ++ td (vfin (PassImper False))) ) ++ heading2 (nounPluralHeading nominal_form_ParameterType).s ++ heading3 (heading infinitive_Parameter) ++ frameTable ( - tr (intagAttr "th" "rowspan=2" "1" ++ + tr (intagAttr "th" "rowspan=2" "1" ++ th (heading short_Parameter) ++ --- td (vfin (Inf Inf1))) ++ tr (th (heading long_Parameter) ++ --- td (vfin (Inf Inf1Long) ++ BIND ++ "(ni)")) ++ - tr (intagAttr "th" "rowspan=2" ("2." ++ heading active_Parameter) ++ - th (heading inessive_Parameter) ++ + tr (intagAttr "th" "rowspan=2" ("2." ++ heading active_Parameter) ++ + th (heading inessive_Parameter) ++ td (vfin (Inf Inf2Iness))) ++ - tr (th (heading instructive_Parameter) ++ + tr (th (heading instructive_Parameter) ++ td (vfin (Inf Inf2Instr))) ++ - tr (th ("2." ++ heading passive_Parameter) ++ - th (heading inessive_Parameter) ++ + tr (th ("2." ++ heading passive_Parameter) ++ + th (heading inessive_Parameter) ++ td (vfin (Inf Inf2InessPass))) ++ - tr (intagAttr "th" "rowspan=7" "3." ++ + tr (intagAttr "th" "rowspan=7" "3." ++ th (heading inessive_Parameter) ++ td (vfin (Inf Inf3Iness))) ++ tr (th (heading elative_Parameter) ++ td (vfin (Inf Inf3Elat))) ++ 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 ++ "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))) ++ tr (th (heading partitive_Parameter) ++ td (vfin (Inf Inf4Part))) ++ @@ -254,25 +254,25 @@ oper ) ++ heading3 (heading participle_Parameter) ++ frameTable ( - tr (intagAttr "th" "rowspan=2" (heading present_Parameter) ++ - th (heading active_Parameter) ++ + tr (intagAttr "th" "rowspan=2" (heading present_Parameter) ++ + th (heading active_Parameter) ++ td (vfin (PresPartAct (AN (NCase Sg Nom))))) ++ - tr (th (heading passive_Parameter) ++ + tr (th (heading passive_Parameter) ++ td (vfin (PresPartPass (AN (NCase Sg Nom))))) ++ - tr (intagAttr "th" "rowspan=2" (heading perfect_Parameter) ++ - th (heading active_Parameter) ++ + tr (intagAttr "th" "rowspan=2" (heading perfect_Parameter) ++ + th (heading active_Parameter) ++ td (vfin (PastPartAct (AN (NCase Sg Nom))))) ++ - tr (th (heading passive_Parameter) ++ + tr (th (heading passive_Parameter) ++ 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))))) ) ; - inflNoun : (NForm -> Str) -> Str = \nouns -> - frameTable ( + inflNoun : (NForm -> Str) -> Str = \nouns -> + frameTable ( 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 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 abessive_Parameter) ++ td (nouns (NCase Sg Abess)) ++ td (nouns (NCase Pl Abess))) ++ 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 @@ -300,6 +300,6 @@ lin MkTag i = ss (i.t) ; {- --# notpresent --} +-} } diff --git a/src/finnish/ExtendFin.gf b/src/finnish/ExtendFin.gf index 6d7e3f7d..86c825b6 100644 --- a/src/finnish/ExtendFin.gf +++ b/src/finnish/ExtendFin.gf @@ -165,11 +165,11 @@ lin PassVPSlash vp = S.passVP vp vp.c2 ; 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 ; adv = vp.adv ; ext = vp.ext ; vptyp = vp.vptyp ; - } ; + } ; } diff --git a/src/finnish/ExtraFin.gf b/src/finnish/ExtraFin.gf index 78178eae..8f6bbb10 100644 --- a/src/finnish/ExtraFin.gf +++ b/src/finnish/ExtraFin.gf @@ -1,21 +1,21 @@ --# -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 { flags coding=utf8 ; lin GenNP np = { s1,sp = \\_,_ => np.s ! NPCase Gen ; - s2 = case np.isPron of { -- "isän auto", "hänen autonsa" - True => table {Front => BIND ++ possSuffixFront np.a ; + s2 = case np.isPron of { -- "isän auto", "hänen autonsa" + True => table {Front => BIND ++ possSuffixFront np.a ; Back => BIND ++ possSuffix np.a } ; False => \\_ => [] } ; isNum = False ; isPoss = np.isPron ; --- also gives "sen autonsa" isDef = True ; --- "Jussin kolme autoa ovat" ; thus "...on" is missing - isNeg = False + isNeg = False } ; GenIP ip = {s = \\_,_ => ip.s ! NPCase Gen} ; @@ -24,8 +24,8 @@ concrete ExtraFin of ExtraFinAbs = CatFin ** h = n2.h } ; GenRP num cn = { - s = \\n,c => let k = npform2case num.n c in relPron ! n ! Gen ++ cn.s ! NCase num.n k ; - a = RNoAg + s = \\n,c => let k = npform2case num.n c in relPron ! n ! Gen ++ cn.s ! NCase num.n k ; + a = RNoAg --- 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)} ; ConjVPI = conjunctDistrTable VVType ; - ComplVPIVV vv vpi = + ComplVPIVV vv vpi = insertObj (\\_,_,_ => vpi.s ! vv.vi) (predSV vv) ; lincat VPS = { - s : Agr => Str ; + s : Agr => Str ; sc : SubjCase ; --- can be different for diff parts h : Harmony --- can be different for diff parts } ; [VPS] = { - s1,s2 : Agr => Str ; + s1,s2 : Agr => Str ; sc : SubjCase ; --- take the first: minä osaan kutoa ja täytyy virkata 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 } ; - AdvExistNP adv np = - mkClause (\_ -> adv.s) np.a (insertObj + AdvExistNP adv np = + mkClause (\_ -> adv.s) np.a (insertObj (\\_,b,_ => np.s ! NPSep) (predV vpVerbOlla)) ; RelExistNP prep rp np = { - s = \\t,ant,bo,ag => - let + s = \\t,ant,bo,ag => + let n = complNumAgr ag ; - cl = mkClause + cl = mkClause (\_ -> appCompl True Pos prep (rp2np n rp)) - np.a - (insertObj - (\\_,b,_ => np.s ! NPSep) + np.a + (insertObj + (\\_,b,_ => np.s ! NPSep) (predV vpVerbOlla)) ; - in + in cl.s ! t ! ant ! bo ! SDecl ; c = NPCase Nom } ; AdvPredNP adv v np = - mkClause (\_ -> adv.s) np.a (insertObj + mkClause (\_ -> adv.s) np.a (insertObj (\\_,b,_ => subjForm np v.sc b) (predSV v)) ; - ICompExistNP adv np = - let cl = mkClause (\_ -> adv.s ! np.a) np.a (insertObj + ICompExistNP adv np = + let cl = mkClause (\_ -> adv.s ! np.a) np.a (insertObj (\\_,b,_ => np.s ! NPSep) (predV vpVerbOlla)) ; in { s = \\t,a,p => cl.s ! t ! a ! p ! SDecl } ; 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)) ; in { s = \\t,a,p => cl.s ! t ! a ! p ! SDecl @@ -132,26 +132,26 @@ concrete ExtraFin of ExtraFinAbs = CatFin ** n = Sg } ; - PartCN cn = - let + PartCN cn = + let acn = DetCN (DetQuant IndefArt NumSg) cn in { s = table { NPCase Nom | NPAcc => acn.s ! NPCase ResFin.Part ; c => acn.s ! c - } ; + } ; a = acn.a ; isPron = False ; isNeg = False } ; - - PartPlCN cn = - let + + PartPlCN cn = + let acn = DetCN (DetQuant IndefArt NumPl) cn in { s = table { NPCase Nom | NPAcc => acn.s ! NPCase ResFin.Part ; c => acn.s ! c - } ; + } ; a = acn.a ; isPron = False ; isNeg = False } ; @@ -167,7 +167,7 @@ concrete ExtraFin of ExtraFinAbs = CatFin ** ---- copied from VerbFin.CompAP, should be shared ICompAP ap = { - s = \\agr => + s = \\agr => let n = complNumAgr agr ; c = case n of { @@ -181,7 +181,7 @@ concrete ExtraFin of ExtraFinAbs = CatFin ** ProDrop p = { s = table {NPCase Nom => [] ; c => p.s ! c} ; - poss = [] ; + poss = [] ; -- drop Gen only works in adjectival position: "autoni", but not in "ø täytyy mennä" a = p.a ; 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 sp = \\_,_ => p.s ! NPCase Gen ; s2 = case p.hasPoss of { - True => table {Front => BIND ++ possSuffixFront p.a ; + True => table {Front => BIND ++ possSuffixFront p.a ; Back => BIND ++ possSuffix p.a } ; False => \\_ => [] -- sen nimi } ; @@ -201,53 +201,53 @@ concrete ExtraFin of ExtraFinAbs = CatFin ** isNeg = False } ; - lincat + lincat ClPlus, ClPlusObj, ClPlusAdv = ClausePlus ; Part = {s : Harmony => Str} ; - lin - S_SVO part t p clp = - let + lin + S_SVO part t p clp = + let cl = clp.s ! t.t ! t.a ! p.p ; pa = part.s ! Back ---- in - {s = t.s ++ p.s ++ cl.subj ++ pa ++ cl.fin ++ cl.inf ++ cl.compl ++ cl.adv ++ cl.ext} ; - S_OSV part t p clp = - let + {s = t.s ++ p.s ++ cl.subj ++ pa ++ cl.fin ++ cl.inf ++ cl.compl ++ cl.adv ++ cl.ext} ; + S_OSV part t p clp = + let cl = clp.s ! t.t ! t.a ! p.p ; pa = part.s ! Back ---- in - {s = t.s ++ p.s ++ cl.compl ++ pa ++ cl.subj ++ cl.fin ++ cl.inf ++ cl.adv ++ cl.ext} ; - S_VSO part t p clp = - let + {s = t.s ++ p.s ++ cl.compl ++ pa ++ cl.subj ++ cl.fin ++ cl.inf ++ cl.adv ++ cl.ext} ; + S_VSO part t p clp = + let cl = clp.s ! t.t ! t.a ! p.p ; pa = part.s ! cl.h in - {s = t.s ++ p.s ++ cl.fin ++ pa ++ cl.subj ++ cl.inf ++ cl.compl ++ cl.adv ++ cl.ext} ; - S_ASV part t p clp = - let + {s = t.s ++ p.s ++ cl.fin ++ pa ++ cl.subj ++ cl.inf ++ cl.compl ++ cl.adv ++ cl.ext} ; + S_ASV part t p clp = + let cl = clp.s ! t.t ! t.a ! p.p ; pa = part.s ! cl.h 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 = - let + S_OVS part t p clp = + let cl = clp.s ! t.t ! t.a ! p.p ; pa = part.s ! Back ---- 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 ; 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) ; - 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) ; - 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) ; - PredClPlusAdv np vp adv = + PredClPlusAdv np vp adv = 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) ; ClPlusWithObj c = c ; @@ -267,7 +267,7 @@ concrete ExtraFin of ExtraFinAbs = CatFin ** {- ----- s = \\vif,ant,pol,agr => case vif of { 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 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 ; adv = vp.adv ; ext = vp.ext ; vptyp = vp.vptyp ; - } ; + } ; AdjAsCN ap = { @@ -305,13 +305,13 @@ concrete ExtraFin of ExtraFinAbs = CatFin ** quant : NounFin.Quant = lin Quant { -- possessive pronoun with suffix only s2 : Harmony => Str = \\harm => possSuffixGen harm agr ; s1,sp = \\_,_ => [] ; isNum,isNeg = False ; isPoss,isDef = True - } ; + } ; det = NounFin.DetQuant quant num in (NounFin.DetCN det cn).s ! npf ; isPron = False } ; - -} + +} diff --git a/src/finnish/ExtraFinAbs.gf b/src/finnish/ExtraFinAbs.gf index 49a77832..d9c961e7 100644 --- a/src/finnish/ExtraFinAbs.gf +++ b/src/finnish/ExtraFinAbs.gf @@ -61,7 +61,7 @@ abstract ExtraFinAbs = Extra [ ClPlusWithObj : ClPlusObj -> ClPlus ; -- to make non-fronted obj focusable ClPlusWithAdv : ClPlusAdv -> ClPlus ; -- to make non-fronted adv focusable - noPart, han_Part, pa_Part, pas_Part, ko_Part, kos_Part, - kohan_Part, pahan_Part : Part ; + noPart, han_Part, pa_Part, pas_Part, ko_Part, kos_Part, + kohan_Part, pahan_Part : Part ; } diff --git a/src/finnish/GrammarFin.gf b/src/finnish/GrammarFin.gf index 1ea74f53..297a4f2d 100644 --- a/src/finnish/GrammarFin.gf +++ b/src/finnish/GrammarFin.gf @@ -1,8 +1,8 @@ --# -path=.:../abstract:../common:prelude -concrete GrammarFin of Grammar = - NounFin, - VerbFin, +concrete GrammarFin of Grammar = + NounFin, + VerbFin, AdjectiveFin, AdverbFin, NumeralFin, diff --git a/src/finnish/IdiomFin.gf b/src/finnish/IdiomFin.gf index 69486b9e..030c342b 100644 --- a/src/finnish/IdiomFin.gf +++ b/src/finnish/IdiomFin.gf @@ -4,20 +4,20 @@ concrete IdiomFin of Idiom = CatFin ** flags optimize=all_subs ; coding=utf8; lin - ExistNP np = - let + ExistNP np = + let cas : Polarity -> NPForm = \p -> case p of { Pos => NPSep ; -- on olemassa luku Neg => NPCase Part -- ei ole olemassa lukua } in - mkClause noSubj (agrP3 Sg) (insertObj + mkClause noSubj (agrP3 Sg) (insertObj (\\_,b,_ => "olemassa" ++ np.s ! cas b) (predV olla)) ; - ExistIP ip = + ExistIP ip = let 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 in { 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ää" - CleftNP np rs = mkClause (\_ -> "se") (agrP3 Sg) + CleftNP np rs = mkClause (\_ -> "se") (agrP3 Sg) (insertExtrapos (rs.s ! np.a) (insertObj (\\_,_,_ => np.s ! NPSep) (predV olla))) ; -- 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) (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)) ; - ProgrVP vp = - let + ProgrVP vp = + let inf = (sverb2verbSep vp.s).s ! Inf Inf3Iness ; on = predV olla in { @@ -51,14 +51,14 @@ concrete IdiomFin of Idiom = CatFin ** vptyp = vp.vptyp ; } ; - ImpPl1 vp = + ImpPl1 vp = let vps = (sverb2verbSep vp.s).s ! ImperP1Pl in {s = vps ++ 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 in {s = np.s ! subjcase2npform vp.s.sc ++ vps ++ @@ -75,11 +75,11 @@ concrete IdiomFin of Idiom = CatFin ** } ; 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)) ; ExistIPAdv ip adv = - let + let 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 (predV vpVerbOlla) ; @@ -92,4 +92,3 @@ concrete IdiomFin of Idiom = CatFin ** noSubj : Polarity -> Str = \_ -> [] ; } - diff --git a/src/finnish/IrregFin.gf b/src/finnish/IrregFin.gf index 42e8293e..7327d677 100644 --- a/src/finnish/IrregFin.gf +++ b/src/finnish/IrregFin.gf @@ -1,7 +1,7 @@ -kayda_V = +kayda_V = 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�t") (kay + "k��") (kay + "d��n") (kavi + "n") kavi (kavi + "si") (kay + "nyt") (kay + "tty") (kay + "nee") ; tuntea_V = @@ -18,4 +18,3 @@ tietaa_V taitaa_V siita_V - diff --git a/src/finnish/Kotus.gf b/src/finnish/Kotus.gf index 7f3b07cf..23bd8255 100644 --- a/src/finnish/Kotus.gf +++ b/src/finnish/Kotus.gf @@ -17,7 +17,7 @@ oper d03 : Str -> NForms -- 481 ääntiö = \s -> dSilakka s (s + "n") (s + "it" + vowelHarmony s) ; 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)) ; d05 : Str -> NForms -- 3212 öljymaali = \s -> case last s of { @@ -37,7 +37,7 @@ oper d08A : Str -> NForms -- 5 vinaigrette = \s -> dNukke s (weakGrade s + "n") ; d09 : Str -> NForms -- 696 ääriraja - = \s -> let a = last s in dSilakka s + = \s -> let a = last s in dSilakka s (s + "n") (init s + case a of {"a" => "o" ; _ => "ö"} + "j" + a) ; d09A : Str -> NForms -- 1040 ääniraita @@ -45,7 +45,7 @@ oper 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 _ => let a = last s - in dSilakka s + in dSilakka s (weakGrade s + "n") (init s + case a of {"a" => "o" ; _ => "ö"} + "j" + a) } ; @@ -59,21 +59,21 @@ oper d11 : Str -> NForms -- 46 ödeema = \s -> dSilakka s (weakGrade s + "n") (init s + "i" + vowelHarmony (last s)) ; d12 : Str -> NForms -- 1125 örinä - = \s -> let a = vowelHarmony (last s) in - dSilakka s (s + "n") + = \s -> let a = vowelHarmony (last s) in + dSilakka s (s + "n") (init s + case a of {"a" => "o" ; _ => "ö"} + "it" + a) ; d13 : Str -> NForms -- 157 virtaska - = \s -> let a = vowelHarmony (last s) in - dSilakka s (s + "n") + = \s -> let a = vowelHarmony (last s) in + dSilakka s (s + "n") (init s + case a of {"a" => "o" ; _ => "ö"} + "j" + a) ; d14A : Str -> NForms -- 244 ötökkä - = \s -> let a = vowelHarmony (last s) ; ws = weakGrade s in - dSilakka s (ws + "n") + = \s -> let a = vowelHarmony (last s) ; ws = weakGrade s in + dSilakka s (ws + "n") (init ws + case a of {"a" => "o" ; _ => "ö"} + "it" + a) ; d15 : Str -> NForms -- 170 äreä = dKorkea ; 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) ; d16A : Str -> NForms -- 20 ylempi = dSuurempi ; @@ -106,13 +106,13 @@ oper d28A : Str -> NForms -- 1 jälsi = \s -> dArpi s (Predef.tk 2 s + "len") ; 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} ; 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} ; d31 : Str -> NForms -- 3 yksi - = \s -> let + = \s -> let y = Predef.tk 3 s ; a = vowelHarmony y in nForms10 @@ -127,7 +127,7 @@ oper d33A : Str -> NForms -- 181 yllytin = \s -> dLiitin s (strongGrade (init s) + "men") ; d34 : Str -> NForms -- 1 alaston - = \s -> let alastom = init s in + = \s -> let alastom = init s in nForms10 s (alastom + "an") (s + "ta") (alastom + "ana") (alastom + "aan") (alastom + "ien") (alastom + "ia") (alastom + "ina") (alastom + "issa") @@ -143,7 +143,7 @@ oper d36 : Str -> NForms -- 11 ylin = dSuurin ; d37 : Str -> NForms -- 1 vasen - = \s -> let vasem = init s + "m" in + = \s -> let vasem = init s + "m" in nForms10 s (vasem + "man") (s + "ta") (vasem + "pana") (vasem + "paan") (vasem + "pien") (vasem + "pia") (vasem + "pina") (vasem + "missa") @@ -159,7 +159,7 @@ oper d41A : Str -> NForms -- 401 öljykangas = \s -> let is = init s in dRae s (strongGrade is + last is + "n") ; d42 : Str -> NForms -- 1 mies - = \s -> let mieh = init s + "h" in + = \s -> let mieh = init s + "h" in nForms10 s (mieh + "en") (s + "tä") (mieh + "enä") (mieh + "een") (s + "ten") (mieh + "iä") (mieh + "inä") (mieh + "issä") @@ -169,19 +169,19 @@ oper d43A : Str -> NForms -- 1 immyt = \s -> dRae s (strongGrade (init s) + "en") ; d44 : Str -> NForms -- 1 kevät - = \s -> let kevä = init s in + = \s -> let kevä = init s in nForms10 s (kevä + "än") (s + "tä") (kevä + "änä") (kevä + "äseen") (s + "iden") (kevä + "itä") (kevä + "inä") (kevä + "issä") (kevä + "isiin") ; d45 : Str -> NForms -- 23 yhdes - = \s -> let yhde = init s ; a = vowelHarmony s in + = \s -> let yhde = init s ; a = vowelHarmony s in nForms10 s (yhde + "nnen") (yhde + "tt" + a) (yhde + "nten" + a) (yhde + "nteen") (yhde + "nsien") (yhde + "nsi" + a) (yhde + "nsin" + a) (yhde + "nsiss" + a) (yhde + "nsiin") ; d46 : Str -> NForms -- 1 tuhat - = \s -> let tuha = init s ; a = vowelHarmony s in + = \s -> let tuha = init s ; a = vowelHarmony s in nForms10 s (tuha + "nnen") (tuha + "tt" + a) (tuha + "nten" + a) (tuha + "nteen") (tuha + "nsien") (tuha + "nsi" + a) (tuha + "nsin" + a) (tuha + "nsiss" + a) @@ -210,13 +210,13 @@ oper c52A : Str -> VForms -- 1568 öljyyntyä = \s -> cHukkua s (weakGrade (init s) + "n") ; 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") ; c53A : Str -> VForms -- 2121 örähtää = \s -> let ota = weakGrade (init s) in cOttaa s (ota + "n") (init ota + "in") (Predef.tk 2 s + "i") ; 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") ; c54A : Str -> VForms -- 316 ääntää = \s -> let ota = weakGrade (init s) ; o = Predef.tk 2 ota in @@ -224,7 +224,7 @@ oper c55A : Str -> VForms -- 7 yltää = c54A ; --? diff: variation ylti/ylsi 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 ö c56A : Str -> VForms -- 28 virkkaa = \s -> let ota = weakGrade (init s) ; ot = init ota in @@ -293,7 +293,7 @@ oper c75A : Str -> VForms -- 9 siitä = \s -> cPudota s (strongGrade (Predef.tk 2 s) + "si") ; 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 -- defective verbs c77 : Str -> VForms -- 3 vipajaa @@ -309,12 +309,11 @@ oper = c99 ; -- dummy -- compound nouns, latter part inflected - compoundNK : Str -> NForms -> NForms = \x,y -> + compoundNK : Str -> NForms -> NForms = \x,y -> \\v => x + y ! v ; --- 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 ; } -