--# -path=.:../prelude:../common:../abstract --# -coding=utf8 -- A Polish verb Resource Morphology -- -- Adam Slaski, 2009 -- resource MorphoVerbLit = ResLit ** open Prelude, CatLit, (Predef=Predef), (Adj=ParadigmsAdjectiveLit), MorphoAdjectiveLit in { flags coding=utf8; -- Fonctions de complémentation/formation du noyau prédicatif utilisées dans SentenceLit -- Pour le lituanien on peut sans doute simplifier oper PresForms : Type = { prsg1, prsg2, pr3, prpl1, prpl2 : Str } ; PastForms : Type = { psg1, psg2, p3, ppl1, ppl2 : Str } ; PastFreqForms : Type = { pfsg1, pfsg2, pf3, pfpl1, pfpl2 : Str } ; FutForms : Type = { fsg1, fsg2, f3, fpl1, fpl2 : Str } ; HypForms : Type = { csg1, csg2, c3, cpl1, cpl2 : Str } ; ImperForms : Type = { isg2, ipl1, ipl2 : Str } ; GerundForms : Type = { ms, fs, mp, fp : Str } ; mkVerb : Str -> Str -> Str -> Verb = \infForm, presForm, pastForm -> let presCore = getPresCore presForm in let pastCore = getPastCore pastForm in let reflStatus = getReflStatus infForm in let conjClass = getConjClass presCore.p2 pastCore.p2 in { forms = mkVerbTables reflStatus (getInfStem infForm) presCore.p1 pastCore.p1 conjClass ; refl = reflStatus; asp = Dual; -- a revoir passPastPart = mkPassiveParticipleTable (getInfStem infForm) ; actPastPart = mkActivePastParticipleTable pastCore.p1 ; actPastFreqPart = mkActivePastParticipleTable ((getInfStem infForm) + "dav") ; actPresPart = mkActivePresParticipleTable presCore ; actFutPart = mkActivePresParticipleTable <(getInfStem infForm) + "s",PR_IA> ; }; mkCopulaVerb : Verb = { forms = mkCopulaVerbTables ; refl = Norefl; asp = Dual; -- a revoir passPastPart = mkPassiveParticipleTable "bū" ; actPastPart = mkActivePastParticipleTable "buv" ; actPastFreqPart = mkActivePastParticipleTable ("bū" + "dav") ; actPresPart = mkActivePresParticipleTable <"es",PR_A> ; actFutPart = mkActivePresParticipleTable <"bū" + "s",PR_IA> ; }; -- Incomplete (Infixed refl not obtained) getReflStatus : Str -> ReflStatus = \str -> case str of { _ + "tis" => Postfix ; _ => Norefl }; oper mkPassiveParticipleTable : Str -> AdjTable; oper mkPassiveParticipleTable infStem = record2table (adj1aModel (infStem + "t")) ; oper mkActivePastParticipleTable : Str -> AdjTable; oper mkActivePastParticipleTable stem = record2table { msnom = stem + "ęs" ; msacc = stem + "usį" ; msgen = stem + "usio" ; msins = stem + "usiu" ; msdat = stem + "usiam" ; msloc = stem + "usiame" ; mpnom = stem + "ę" ; mpacc = stem + "usius" ; mpgen = stem + "usių" ; mpins = stem + "usiais" ; mpdat = stem + "usiems" ; mploc = stem + "usiuose" ; fsnom = stem + "usi" ; fsacc = stem + "usią" ; fsgen = stem + "usios" ; fsins = stem + "usia" ; fsdat = stem + "usiai" ; fsloc = stem + "usioje" ; fpnom = stem + "usios" ; fpacc = stem + "usias" ; fpgen = stem + "usių" ; fpins = stem + "usiomis" ; fpdat = stem + "usioms" ; fploc = stem + "usiose" ; nnom = stem + "ę" ; } ; oper mkActivePresParticipleTable : Str * ThVowelPres -> AdjTable; oper mkActivePresParticipleTable info = case info of { => record2table { msnom = stem + "įs" ; -- intis msacc = stem + "intį" ; msgen = stem + "inčio" ; msins = stem + "inčiu" ; msdat = stem + "inčiam" ; msloc = stem + "inčiame" ; mpnom = stem + "į" ; -- intys mpacc = stem + "inčius" ; mpgen = stem + "inčių" ; mpins = stem + "inčiais" ; mpdat = stem + "inčiems" ; mploc = stem + "inčiuose" ; fsnom = stem + "inti" ; fsacc = stem + "inčią" ; fsgen = stem + "inčios" ; fsins = stem + "inčia" ; fsdat = stem + "inčiai" ; fsloc = stem + "inčioje" ; fpnom = stem + "inčios" ; fpacc = stem + "inčias" ; fpgen = stem + "inčių" ; fpins = stem + "inčiomis" ; fpdat = stem + "inčioms" ; fploc = stem + "inčiose" ; nnom = stem + "į" ; } ; => record2table { msnom = stem + "iąs" ; -- iantis msacc = stem + "iantį" ; msgen = stem + "iančio" ; msins = stem + "iančiu" ; msdat = stem + "iančiam" ; msloc = stem + "iančiame" ; mpnom = stem + "ią" ; -- iantys mpacc = stem + "iančius" ; mpgen = stem + "iančių" ; mpins = stem + "iančiais" ; mpdat = stem + "iančiems" ; mploc = stem + "iančiuose" ; fsnom = stem + "ianti" ; fsacc = stem + "iančią" ; fsgen = stem + "iančios" ; fsins = stem + "iančia" ; fsdat = stem + "iančiai" ; fsloc = stem + "iančioje" ; fpnom = stem + "iančios" ; fpacc = stem + "iančias" ; fpgen = stem + "iančių" ; fpins = stem + "iančiomis" ; fpdat = stem + "iančioms" ; fploc = stem + "iančiose" ; nnom = stem + "ią" ; } ; => record2table { msnom = stem + "ąs" ; -- antis msacc = stem + "antį" ; msgen = stem + "ančio" ; msins = stem + "ančiu" ; msdat = stem + "ančiam" ; msloc = stem + "ančiame" ; mpnom = stem + "ą" ; -- antys mpacc = stem + "ančius" ; mpgen = stem + "ančių" ; mpins = stem + "ančiais" ; mpdat = stem + "ančiems" ; mploc = stem + "ančiuose" ; fsnom = stem + "anti" ; fsacc = stem + "ančią" ; fsgen = stem + "ančios" ; fsins = stem + "ančia" ; fsdat = stem + "ančiai" ; fsloc = stem + "ančioje" ; fpnom = stem + "ančios" ; fpacc = stem + "ančias" ; fpgen = stem + "ančių" ; fpins = stem + "ančiomis" ; fpdat = stem + "ančioms" ; fploc = stem + "ančiose" ; nnom = stem + "ą" ; } } ; oper mkVerbTables : ReflStatus -> Str -> Str -> Str -> ConjClass -> Fronting => VForm => Str; oper mkVerbTables refl infStem presStem pastStem conjClass = case refl of { Postfix => mkFinalReflVerbTables infStem presStem pastStem conjClass ; _ => mkUniqueVerbTables infStem presStem pastStem conjClass } ; mkUniqueVerbTables : Str -> Str -> Str -> ConjClass -> Fronting => VForm =>Str; mkUniqueVerbTables infStem presStem pastStem conjClass = let pres = makeVerbPres "" presStem conjClass in let negPres = makeVerbPres "ne" presStem conjClass in let past = makeVerbPast "" pastStem conjClass in let negPast = makeVerbPast "ne" pastStem conjClass in let pastFreq = makeVerbPastFreq "" infStem in let negPastFreq = makeVerbPastFreq "ne" infStem in let fut = makeVerbFut "" infStem in let negFut = makeVerbFut "ne" infStem in let cond = makeVerbCond "" infStem in let negCond = makeVerbCond "ne" infStem in let imper = makeVerbImper "" infStem in let negImper = makeVerbImper "ne" infStem in let gerund = makeGerund "" infStem in let negGerund = makeGerund "nesi" infStem in table { Unfronted => makeVerbTable (infStem + "ti") pres past pastFreq fut cond imper gerund ; NePref => makeVerbTable ("ne" + infStem + "ti") negPres negPast negPastFreq negFut negCond negImper negGerund } ; mkFinalReflVerbTables : Str -> Str -> Str -> ConjClass -> Fronting => VForm =>Str; mkFinalReflVerbTables infStem presStem pastStem conjClass = let pres = makeVerbPresRefl presStem conjClass in let negPres = makeVerbPres "nesi" presStem conjClass in let past = makeVerbPastRefl pastStem conjClass in let negPast = makeVerbPast "nesi" pastStem conjClass in let pastFreq = makeVerbPastFreqRefl infStem in let negPastFreq = makeVerbPastFreq "nesi" infStem in let fut = makeVerbFutRefl infStem in let negFut = makeVerbFut "nesi" infStem in let cond = makeVerbCondRefl infStem in let negCond = makeVerbCond "nesi" infStem in let imper = makeVerbImperRefl infStem in let negImper = makeVerbImper "nesi" infStem in let gerund = makeGerundRefl infStem in let negGerund = makeGerund "nesi" infStem in table { Unfronted => makeVerbTable (infStem + "tis") pres past pastFreq fut cond imper gerund ; NePref => makeVerbTable ("nesi" + infStem + "ti") negPres negPast negPastFreq negFut negCond negImper negGerund } ; mkCopulaVerbTables : Fronting => VForm =>Str; mkCopulaVerbTables = let pres = { prsg1 = "esu" ; prsg2 = "esi" ; pr3 = "" ; prpl1 = "esame" ; prpl2 = "esate"} in let negPres = { prsg1, prsg2, pr3, prpl1, prpl2 = "ne"} in let past = makeVerbPast "" "buv" C1a in let negPast = makeVerbPast "ne" "buv" C1a in let pastFreq = makeVerbPastFreq "" "bū" in let negPastFreq = makeVerbPastFreq "ne" "bū" in let fut = makeVerbFut "" "bū" in let negFut = makeVerbFut "ne" "bū" in let cond = makeVerbCond "" "bū" in let negCond = makeVerbCond "ne" "bū" in let imper = makeVerbImper "" "bū" in let negImper = makeVerbImper "ne" "bū" in let gerund = makeGerund "" "bū" in let negGerund = makeGerund "nesi" "bū" in table { Unfronted => makeVerbTable ("bū" + "ti") pres past pastFreq fut cond imper gerund ; NePref => makeVerbTable ("ne" + "bū" + "ti") negPres negPast negPastFreq negFut negCond negImper negGerund } ; makeVerbTable : Str -> PresForms -> PastForms -> PastFreqForms -> FutForms -> HypForms -> ImperForms -> GerundForms -> VForm => Str; makeVerbTable infForm pres past pastFreq fut cond imper gerund = table { VInf => infForm; VImperSg2 => imper.isg2; VImperPl1 => imper.ipl1; VImperPl2 => imper.ipl2; VPres Sg P1 => pres.prsg1 ; VPres Sg P2 => pres.prsg2 ; VPres Sg P3 => pres.pr3 ; VPres Pl P1 => pres.prpl1 ; VPres Pl P2 => pres.prpl2 ; VPres Pl P3 => pres.pr3 ; VPast Sg P1 => past.psg1 ; VPast Sg P2 => past.psg2 ; VPast Sg P3 => past.p3 ; VPast Pl P1 => past.ppl1 ; VPast Pl P2 => past.ppl2 ; VPast Pl P3 => past.p3 ; VPastFreq Sg P1 => pastFreq.pfsg1 ; VPastFreq Sg P2 => pastFreq.pfsg2 ; VPastFreq Sg P3 => pastFreq.pf3 ; VPastFreq Pl P1 => pastFreq.pfpl1 ; VPastFreq Pl P2 => pastFreq.pfpl2 ; VPastFreq Pl P3 => pastFreq.pf3 ; VFut Sg P1 => fut.fsg1 ; VFut Sg P2 => fut.fsg2 ; VFut Sg P3 => fut.f3 ; VFut Pl P1 => fut.fpl1 ; VFut Pl P2 => fut.fpl2 ; VFut Pl P3 => fut.f3 ; VHyp Sg P1 => cond.csg1 ; VHyp Sg P2 => cond.csg2 ; VHyp Sg P3 => cond.c3 ; VHyp Pl P1 => cond.cpl1 ; VHyp Pl P2 => cond.cpl2 ; VHyp Pl P3 => cond.c3 ; VGerund Masc Sg => gerund.ms ; VGerund Fem Sg => gerund.fs ; VGerund Masc Pl => gerund.mp ; VGerund Fem Pl => gerund.fp }; getInfStem : Str -> Str = \v -> case v of { s + "ti" => s ; s + "tis" => s ; _ => Predef.error ("Error: incorrect Inf:" + v) } ; getPresCore : Str -> Str * ThVowelPres = \v -> case v of { s + ("ia" | "iasi") => ; s + ("a" | "asi") => ; s + ("o" | "osi") => ; s + ("isi" | "i") => ; _ => Predef.error ("Error: incorrect Pres P3:" + v) } ; getPastCore : Str -> Str * ThVowelPast = \v -> case v of { s + ("o" | "osi") => ; s + ("ė" | "ėsi") => ; _ => Predef.error ("Error: incorrect Past P3:" + v) } ; -- Passing the stem for the error message could help debugging... getConjClass : ThVowelPres -> ThVowelPast -> ConjClass = \presThV,pastThV -> case of { => C1a ; => C1b ; => C1c ; => C1d ; => C2a ; => C3a ; => C3b ; _ => Predef.error ("Error: guessing verb conjugation does not work for the Thematic vowel combintation") } ; makeVerbPres : Str -> Str -> ConjClass -> PresForms -- pfx = ne, nesi (and could be tebe, tebesi and so on) = \pfx, presStem, cc -> case presStem of { "yr" => { prsg1 = (case pfx of { "ne" => "nesu"; _ => "esu" }); prsg2 = pfx + "esi" ; pr3 = pfx + "yra" ; prpl1 = pfx + "esame" ; prpl2 = pfx + "esate" ; } ; _ => case cc of { (C1a|C1b) => { prsg1 = pfx + presStem + "u" ; prsg2 = pfx + presStem + "i" ; pr3 = pfx + presStem + "a" ; prpl1 = pfx + presStem + "ame" ; prpl2 = pfx + presStem + "ate" ; } ; (C1c|C1d) => { -- kvieč(ia) prsg1 = pfx + presStem + "iu" ; prsg2 = pfx + (harden presStem) + "i" ; pr3 = pfx + presStem + "ia" ; prpl1 = pfx + presStem + "iame" ; prpl2 = pfx + presStem + "iate" ; } ; C2a => { -- gird(i) prsg1 = pfx + (soften presStem) + "iu" ; prsg2 = pfx + presStem + "i" ; pr3 = pfx + presStem + "i" ; prpl1 = pfx + presStem + "ime" ; prpl2 = pfx + presStem + "ite" ; } ; (C3a|C3b) => { prsg1 = pfx + presStem + "au" ; prsg2 = pfx + presStem + "ai" ; pr3 = pfx + presStem + "o" ; prpl1 = pfx + presStem + "ome" ; prpl2 = pfx + presStem + "ote" ; } } } ; makeVerbPresRefl : Str -> ConjClass -> PresForms = \presStem, cc -> case cc of { (C1a|C1b) => { prsg1 = presStem + "uosi" ; prsg2 = presStem + "iesi" ; pr3 = presStem + "asi" ; prpl1 = presStem + "amės" ; prpl2 = presStem + "atės" ; } ; (C1c|C1d) => { -- kvieč(ia) prsg1 = presStem + "iuosi" ; prsg2 = (harden presStem) + "iesi" ; pr3 = presStem + "iasi" ; prpl1 = presStem + "iamės" ; prpl2 = presStem + "iatės" ; } ; C2a => { -- gird(i) prsg1 = (soften presStem) + "iuosi" ; prsg2 = presStem + "iesi" ; pr3 = presStem + "isi" ; prpl1 = presStem + "imės" ; prpl2 = presStem + "itės" ; } ; (C3a|C3b) => { prsg1 = presStem + "ausi" ; prsg2 = presStem + "aisi" ; pr3 = presStem + "osi" ; prpl1 = presStem + "omės" ; prpl2 = presStem + "otės" ; } }; makeVerbPast : Str -> Str -> ConjClass -> PastForms = \pfx, pastStem, cc -> case cc of { (C1a|C1d|C2a|C3b) => { psg1 = pfx + pastStem + "au" ; psg2 = pfx + pastStem + "ai" ; p3 = pfx + pastStem + "o" ; ppl1 = pfx + pastStem + "ome" ; ppl2 = pfx + pastStem + "ote" ; } ; _ => { -- kviet(ė) psg1 = pfx + (soften pastStem) + "iau" ; psg2 = pfx + pastStem + "ei" ; p3 = pfx + pastStem + "ė" ; ppl1 = pfx + pastStem + "ėme" ; ppl2 = pfx + pastStem + "ėte" ; } } ; makeVerbPastRefl : Str -> ConjClass -> PastForms = \pastStem, cc -> case cc of { (C1a|C1d|C2a|C3b) => { psg1 = pastStem + "ausi" ; psg2 = pastStem + "aisi" ; p3 = pastStem + "osi" ; ppl1 = pastStem + "omės" ; ppl2 = pastStem + "otės" ; } ; _ => { -- kviet(ė) psg1 = (soften pastStem) + "iausi" ; psg2 = pastStem + "eisi" ; p3 = pastStem + "ėsi" ; ppl1 = pastStem + "ėmės" ; ppl2 = pastStem + "ėtės" ; } } ; makeVerbPastFreq : Str -> Str -> PastFreqForms = \pfx, infStem -> { pfsg1 = pfx + infStem + "davau" ; pfsg2 = pfx + infStem + "davai" ; pf3 = pfx + infStem + "davo" ; pfpl1 = pfx + infStem + "davome" ; pfpl2 = pfx + infStem + "davote" ; } ; makeVerbPastFreqRefl : Str -> PastFreqForms = \infStem -> { pfsg1 = infStem + "davausi" ; pfsg2 = infStem + "davaisi" ; pf3 = infStem + "davosi" ; pfpl1 = infStem + "davomės" ; pfpl2 = infStem + "davotės" ; } ; -- !!! 3rd p. Shortening makeVerbFut : Str -> Str -> FutForms = \pfx, infStem -> case infStem of { shortStem + "s" => { fsg1 = pfx + infStem + "iu" ; fsg2 = pfx + infStem + "i" ; -- !!! 3rd p. Shortening f3 = pfx + infStem ; fpl1 = pfx + infStem + "ime" ; fpl2 = pfx + infStem + "ite" ; } ; _ => { fsg1 = pfx + infStem + "siu" ; fsg2 = pfx + infStem + "si" ; -- !!! 3rd p. Shortening f3 = pfx + infStem + "s" ; fpl1 = pfx + infStem + "sime" ; fpl2 = pfx + infStem + "site" ; } } ; -- !!! 3rd p. Shortening makeVerbFutRefl : Str -> FutForms = \infStem -> case infStem of { _ + "s" => { fsg1 = infStem + "iuosi" ; fsg2 = infStem + "iesi" ; -- !!! 3rd p. Shortening f3 = infStem + "is" ; fpl1 = infStem + "imės" ; fpl2 = infStem + "itės" ; } ; _ => { fsg1 = infStem + "siuosi" ; fsg2 = infStem + "siesi" ; -- !!! 3rd p. Shortening f3 = infStem + "sis" ; fpl1 = infStem + "simės" ; fpl2 = infStem + "sitės" ; } } ; makeVerbCond : Str -> Str -> HypForms = \pfx, infStem -> { csg1 = pfx + infStem + "čiau" ; csg2 = pfx + infStem + "tum" ; c3 = pfx + infStem + "tų" ; cpl1 = pfx + infStem + "tume" ; cpl2 = pfx + infStem + "tumėte" ; } ; makeVerbCondRefl : Str -> HypForms = \infStem -> { csg1 = infStem + "čiausi" ; csg2 = infStem + "tumeisi" ; c3 = infStem + "tųsi" ; cpl1 = infStem + "tumės" ; cpl2 = infStem + "tumėtės" ; } ; makeVerbImper : Str -> Str -> ImperForms = \pfx, infStem -> case infStem of { shortStem + ("g" | "k") => { isg2 = pfx + shortStem + "k" ; ipl1 = pfx + shortStem + "kime" ; ipl2 = pfx + shortStem + "kite" ; } ; _ => { isg2 = pfx + infStem + "k" ; ipl1 = pfx + infStem + "kime" ; ipl2 = pfx + infStem + "kite" ; } } ; makeVerbImperRefl : Str -> ImperForms = \infStem -> case infStem of { shortStem + ("g" | "k") => { isg2 = shortStem + "kis" ; ipl1 = shortStem + "kimės" ; ipl2 = shortStem + "kitės" ; } ; _ => { isg2 = infStem + "kis" ; ipl1 = infStem + "kimės" ; ipl2 = infStem + "kitės" ; } } ; makeGerund : Str -> Str -> GerundForms = \pfx, infStem -> { ms = pfx + infStem + "damas" ; fs = pfx + infStem + "dama" ; mp = pfx + infStem + "dami" ; fp = pfx + infStem + "damos" ; } ; makeGerundRefl : Str -> GerundForms = \infStem -> { ms = infStem + "damasi" ; fs = infStem + "damasi" ; mp = infStem + "damiesi" ; fp = infStem + "damosi" ; } ; -- No PastFreq... indicativeForm : Verb -> Polarity -> Tense * Anteriority * GenNum * Person => Str; indicativeForm verb pol = -- case pol of { -- <_, Anter, _, _> => mkFormWithCopula verb pol; -- _ => let forms = verb.forms; in let buti = (mkVerb "būti" "yra" "buvo").forms in case pol of { Pos => table { => forms ! Unfronted ! (VPres (extract_num!gn) p); => forms ! Unfronted ! (VPast (extract_num!gn) p); => forms ! Unfronted ! (VFut (extract_num!gn) p); => forms ! Unfronted ! (VHyp (extract_num!gn) p) ; => buti ! Unfronted ! (VPres (extract_num!gn) p) ++ (mkAtable (table2record verb.actPastPart))!(cast_aform!); => buti ! Unfronted ! (VPast (extract_num!gn) p) ++ (mkAtable (table2record verb.actPastPart))!(cast_aform!); => buti ! Unfronted ! (VFut (extract_num!gn) p) ++ (mkAtable (table2record verb.actPastPart))!(cast_aform!); => buti ! Unfronted ! (VHyp (extract_num!gn) p) ++ (mkAtable (table2record verb.actPastPart))!(cast_aform!) } ; Neg => table { => forms ! NePref ! (VPres (extract_num!gn) p); => forms ! NePref ! (VPast (extract_num!gn) p); => forms ! NePref ! (VFut (extract_num!gn) p); => forms ! NePref ! (VHyp (extract_num!gn) p); => "ne" + buti ! Unfronted ! (VPres (extract_num!gn) p) ++ (mkAtable (table2record verb.actPastPart))!(cast_aform!); => "ne" + buti ! Unfronted ! (VPast (extract_num!gn) p) ++ (mkAtable (table2record verb.actPastPart))!(cast_aform!); => "ne" + buti ! Unfronted ! (VFut (extract_num!gn) p) ++ (mkAtable (table2record verb.actPastPart))!(cast_aform!); => "ne" + buti ! Unfronted ! (VHyp (extract_num!gn) p) ++ (mkAtable (table2record verb.actPastPart))!(cast_aform!) } -- } }; -- No PastFreq... mkFormWithCopula : Verb -> Polarity -> Tense * Anteriority * GenNum * Person => Str; mkFormWithCopula verb pol = let buti = (mkVerb "būti" "yra" "buvo").forms in case pol of { Pos => table { => buti ! Unfronted ! (VPres (extract_num!gn) p) ++ (mkAtable (table2record verb.actPastPart))!(cast_aform!); => buti ! Unfronted ! (VPast (extract_num!gn) p) ++ (mkAtable (table2record verb.actPastPart))!(cast_aform!); => buti ! Unfronted ! (VFut (extract_num!gn) p) ++ (mkAtable (table2record verb.actPastPart))!(cast_aform!); => buti ! Unfronted ! (VHyp (extract_num!gn) p) ++ (mkAtable (table2record verb.actPastPart))!(cast_aform!) } ; Neg => table { => "ne" + buti ! NePref ! (VPres (extract_num!gn) p) ++ (mkAtable (table2record verb.actPastPart))!(cast_aform!); => "ne" + buti ! NePref ! (VPast (extract_num!gn) p) ++ (mkAtable (table2record verb.actPastPart))!(cast_aform!); => "ne" + buti ! NePref ! (VFut (extract_num!gn) p) ++ (mkAtable (table2record verb.actPastPart))!(cast_aform!); => "ne" + buti ! NePref ! (VHyp (extract_num!gn) p) ++ (mkAtable (table2record verb.actPastPart))!(cast_aform!) } }; imperativeForm : Verb -> Polarity -> GenNum -> Person -> Str; imperativeForm verb pol gn p = -- case pol of { -- <_, Anter, _, _> => -- case pol of { -- Pos => bukOp!<(extract_num!gn), p> ++ (mkAtable (table2record verb.actPastPart))!(cast_aform!); -- Neg => nebukOp!<(extract_num!gn), p> ++ (mkAtable (table2record verb.actPastPart))!(cast_aform!) -- }; -- _ => -- a suppr case pol of { Pos => case <(extract_num!gn), p> of { => "kad" ++ verb.forms ! Unfronted ! VHyp Sg P1; => verb.forms ! Unfronted ! VImperSg2; => "tegul" ++ verb.forms ! Unfronted ! VPres Sg P3; => verb.forms ! Unfronted ! VImperPl1; => verb.forms ! Unfronted ! VImperPl2; => "tegul" ++ verb.forms ! Unfronted ! VPres Pl P3 } ; Neg => case <(extract_num!gn), p> of { => "kad" ++ verb.forms ! NePref ! VHyp Sg P1; => verb.forms ! NePref ! VImperSg2; => "tegul" ++ verb.forms ! NePref ! VPres Sg P3; => verb.forms ! NePref ! VImperPl1; => verb.forms ! NePref ! VImperPl2; => "tegul" ++ verb.forms ! NePref ! VPres Pl P3 } -- } }; infinitiveForm : Verb -> Polarity -> GenNum -> Str; infinitiveForm verb pol gn = --{ -- <_, Anter, _, _> => -- case pol of { -- Pos => "būti" ++ (mkAtable (table2record verb.actPastPart))!(cast_aform!); -- Neg => "nebūti" ++ (mkAtable (table2record verb.actPastPart))!(cast_aform!) -- }; -- _ => case pol of { Pos => verb.forms ! Unfronted ! VInf; Neg => verb.forms ! NePref ! VInf -- } }; -- tegu ar tegul ar te bukOp : Number * Person => Str = table { => ["kad būčiau"]; => ["būk"]; => ["tegul būtų"]; => ["būkime"]; => ["būkite"]; => ["tegul būtų"] }; nebukOp : Number * Person => Str = table { => ["kad nebūčiau"]; => ["nebūk"]; => ["tegul nebūtų"]; => ["nebūkime"]; => ["nebūkite"]; => ["tegul nebūtų"] }; -- PastFreq yraOp : GenNum * Person * Tense * Anteriority => Str = let buti = (mkVerb "būti" "yra" "buvo").forms in table { => buti ! Unfronted ! (VPres (extract_num!gn) p); => buti ! Unfronted ! (VPast (extract_num!gn) p); => buti ! Unfronted ! (VFut (extract_num!gn) p); => buti ! Unfronted ! (VHyp (extract_num!gn) p) }; neraOp : Tense * Anteriority => Str = table { => ["nėra"]; => ["nebuvo"]; => ["nebus"]; => ["nebūtų"] }; }