--# -path=.:../../prelude --1 Egekusii Resource Morphology resource MorphoGus = CommonBantu , ResGus ** open Prelude, Predef in { flags optimize=all ; oper Many_prefix: Gender -> Str = \g -> case of { =>"aba"; || =>"ama"; | =>"cini"; =>"eme"; | =>"ebi"; => "ani" } ; Few_prefix : Gender -> Str = \g -> case of { =>"basi"; || =>"masi"; | =>"cisi"; =>"mesi"; | =>"bisi"; => "asi" } ; Detsomesgprefix : Gender -> Str = \g ->""; {-} case of { => "li" ; => "ki" ; => "me"; => "pe" ; => "kwi" ; | => "nyi" ; |||| | => "mwi" } ; -} Some_prefix : Gender -> Str = \g -> case of { =>"beke"; =>"bike"; =>"make"; =>"make"; =>"nke"; =>"nke"; =>"mebe"; =>"bike"; =>"make"; => "ake" } ; Detsomeplprefix : Gender -> Str = \g ->""; {-} case of { => "we" ; => "mi" ; => "nyi" ; => "pe" ; => "kwi" ; => "vi" ; | => "nye" ; | => "mwi" ; | | => "me" } ; -} mkNum3 : Str -> Str -> {s : DForm => CardOrd => Gender => Str} = \two, second -> {s = table { unit => table {NCard =>\\g => Cardprefix g + two ; NOrd => \\g => Ordprefix g ++ second} ; teen => table {NCard =>\\g =>"ikomi na" ++ CardThirteenprefix g + two ; NOrd => \\g => Ordprefix g ++ "ikomi na" ++ second} ; ten => table {NCard =>\\g =>"emerongo etato" ; NOrd => \\g => Ordprefix g ++ "emerongo etato"}; hund => table {NCard =>\\g =>"amagana atato " ; NOrd => \\g => Ordprefix g ++ "amagana atato"} } } ; mkNum4 : Str -> Str -> {s : DForm => CardOrd => Gender => Str} = \two, second -> {s = table { unit => table {NCard =>\\g => Cardprefix g + two ; NOrd => \\g => Ordprefix g ++ second} ; teen => table {NCard =>\\g =>"ikomi na" ++ Cardfouteenprefix g ; NOrd => \\g => Ordprefix g ++ "ikomi na" ++ second } ; ten => table {NCard =>\\g =>"emerongo ene"; NOrd => \\g => Ordprefix g ++ "emerongo ene"}; hund => table {NCard =>\\g =>"amagana ane " ; NOrd => \\g => Ordprefix g ++ "amagana ane"} } } ; mkNum5 : Str -> Str -> {s : DForm => CardOrd => Gender => Str} = \two, second -> {s = table { unit => table {NCard =>\\g => Cardprefix g + two ;-- create table totake care of eci and oroci which is isano not itano NOrd => \\g => Ordprefix g ++ second} ; teen => table {NCard =>\\g =>"ikomi na" ++ Cardfifteenprefix g + two ; NOrd => \\g => Ordprefix g ++ "ikomi na" ++ second } ; ten => table {NCard =>\\g =>"emerongo etano" ; NOrd => \\g => Ordprefix g ++ "emerongo etano"}; hund => table {NCard =>\\g =>"amagana atano " ; NOrd => \\g => Ordprefix g ++ "amagana atano"} } } ; mkNum6 : Str -> Str -> {s : DForm => CardOrd => Gender => Str} = \two, second -> {s = table { unit => table {NCard =>\\g => Cardprefix g + two ++Cardsixprefix g + second; NOrd => \\g => Ordprefix g ++ "ga" + two ++ "ri" + second} ; teen => table {NCard =>\\g =>"ikomi na" ++ Cardfifteenprefix g + two ++ Cardsixprefix g + second ; NOrd => \\g => Ordprefix g ++ "ikomi na" ++ "ga" + two ++ "ri" + second} ; ten => table {NCard =>\\g =>"emerongo etano" ++ Cardsixprefix g + second ; NOrd => \\g => Ordprefix g ++ "emerongo etato"++ "ri" + second}; hund => table {NCard =>\\g =>"amagana atano "++ Cardoneprefix g + second ; NOrd => \\g => Ordprefix g ++ "amagana atano"++ "ri" + second} } } ; mkNum7 : Str -> Str -> {s : DForm => CardOrd => Gender => Str} = \two, second -> {s = table { unit => table {NCard =>\\g => Cardprefix g + two ++Cardtwoprefix g + second; NOrd => \\g => Ordprefix g ++ "ga" + two ++ "ka" + second} ; teen => table {NCard =>\\g =>"ikomi na" ++ Cardfifteenprefix g + two ++ Cardtwoprefix g + second ; NOrd => \\g => Ordprefix g ++ "ikomi na" ++ "ga" + two ++ "ka" + second} ; ten => table {NCard =>\\g =>"emerongo etano" ++ Cardtwoprefix g + second ; NOrd => \\g => Ordprefix g ++ "emerongo etano"++ "ka" + second}; hund => table {NCard =>\\g =>"amagana atano "++ Cardtwoprefix g + second ; NOrd => \\g => Ordprefix g ++ "amagana atano"++"ka" + second} } } ; mkNum8 : Str -> Str -> {s : DForm => CardOrd => Gender => Str} = \two, second -> {s = table { unit => table {NCard =>\\g => Cardprefix g + two ++ Cardprefix g + second; NOrd => \\g => Ordprefix g ++ "ga" + two ++ "ga" + second} ; teen => table {NCard =>\\g =>"ikomi na" ++ Cardfifteenprefix g + two ++ Cardprefix g + second ; NOrd => \\g => Ordprefix g ++ "ikomi na" ++ "ga" + two ++ "ga" + second} ; ten => table {NCard =>\\g =>"emerongo etano" ++ Cardprefix g + second ; NOrd => \\g => Ordprefix g ++ "emerongo etano"++ "ga" + second}; hund => table {NCard =>\\g =>"amagana atano "++ Cardprefix g + second ; NOrd => \\g => Ordprefix g ++ "amagana atano"++ "ga" + second} } } ; mkNum2 : Str -> Str -> {s : DForm => CardOrd => Gender => Str} = \two, second -> {s = table { unit => table {NCard =>\\g => Cardtwoprefix g + two ; NOrd => \\g => Ordprefix g ++ second} ; teen => table {NCard =>\\g =>"ikomi na" ++ Cardtwelveprefix g + two ; NOrd => \\g => Ordprefix g ++ "ikomi na" ++ Cardtwelveprefix g + two } ; ten => table {NCard =>\\g =>"emerongo ebere" ; NOrd => \\g => Ordprefix g ++ "emerongo ebere" }; hund => table {NCard =>\\g =>"amagana ebere" ; NOrd => \\g => Ordprefix g ++ "amagana ebere" } } } ; mkNum1 : Str -> Str -> {s : DForm => CardOrd => Gender => Str} = \two, second -> {s = table { unit => table {NCard =>\\g => Cardoneprefix g + two ; NOrd => \\g => Ordoneprefix g ++ second} ; teen => table {NCard =>\\g =>"ikomi nemo" ; NOrd => \\g => Ordprefix g ++ "ikomi " ++ "nemo"} ; ten => table {NCard =>\\g =>"ikomi" ; NOrd => \\g => Ordprefix g ++ "ikomi"}; hund => table {NCard =>\\g =>"rigana erimo"; NOrd => \\g => Ordprefix g ++ "rigana erimo" } } } ; regNum : Str -> {s : DForm => CardOrd => Gender => Str} = \six -> {s = table { unit => table {NCard =>\\g => six ; NOrd => \\g => Ordprefix g ++ six} ; teen => table {NCard =>\\g =>"ikomi na" ++ six ; NOrd => \\g => Ordprefix g ++ "ikomi na" ++ six} ; ten => table {NCard =>\\g =>"emerongo" ++ six ; NOrd => \\g => Ordprefix g ++ "emerongo" ++ six}; hund => table {NCard =>\\g =>"amagana " ++ six ; NOrd => \\g => Ordprefix g ++ "amagana" ++ six} } } ; regCardOrd : Str -> {s : CardOrd => Gender => Str} = \ten -> {s = table {NCard => \\g => ten ; NOrd =>\\g => Ordprefix g ++ ten } } ; regCardone : Str -> Str -> {s : CardOrd => Gender => Str} = \ten,one -> {s = table {NCard => \\g => ten ++ Cardoneprefix g + one ; NOrd =>\\g => Ordprefix g ++ ten ++ Cardoneprefix g + one } } ; mkCard : CardOrd -> Str -> Gender => Str = \o,ten -> (regCardOrd ten).s ! o ; regN : Str ->Gender -> Noun = \w, g ->let ndeto= PrefixPlNom g + Predef.drop 3 w; in case g of { G4 => {s = table { Sg => table {Nom => w; Loc => ""} ; Pl=>table{ Nom => "ama" + Predef.drop 2 w; Loc => "" } }; g = g} ; G3=> {s = table { Sg => table {Nom => w; Loc => ""} ; Pl=>table{ Nom => "ci" + Predef.drop 1 w; Loc => "" } }; g = g} ; _ => {s = table { Sg => table {Nom => w; Loc => ""} ; Pl=>table{ Nom => ndeto; Loc => "" } }; g = g}}; iregN :Str-> Str ->Gender -> Noun= \man,men,g -> { s = table{Sg => table{Nom => man ; Loc=> ""}; Pl => table{Nom => men ; Loc=> ""}} ; g = g } ; regA:Str -> {s : AForm => Str} = \seo -> {s = table { AAdj G1 Sg=>case Predef.take 1 seo of { "a"|"e"|"i"|"u" => "omu" + seo; "o" => "omw" + seo; _ => ConsonantAdjprefix G1 Sg + seo }; AAdj G1 Pl =>case Predef.take 1 seo of { _ => ConsonantAdjprefix G1 Pl + seo }; AAdj G2 Sg=>case Predef.take 1 seo of { "a"|"e"|"i"|"u" => "omu" + seo; "o" => "omw" + seo; _ => ConsonantAdjprefix G2 Sg + seo }; AAdj G2 Pl =>case Predef.take 1 seo of { "o" => "emi" + seo; _ => ConsonantAdjprefix G2 Pl + seo }; AAdj G3 Sg=>case Predef.take 1 seo of { "o" |"i" => "eng" + seo; _ => ConsonantAdjprefix G3 Sg + seo }; AAdj G3 Pl =>case Predef.take 1 seo of { "o" |"i" => "ching" + seo; _ => ConsonantAdjprefix G3 Pl + seo }; AAdj G4 Sg=>case Predef.take 1 seo of { "a"|"e"|"i"|"o"|"u" => "rigi" + seo; _ => ConsonantAdjprefix G4 Sg + seo }; AAdj G4 Pl =>case Predef.take 1 seo of { _ => ConsonantAdjprefix G4 Pl + seo }; AAdj G5 Sg=>case Predef.take 1 seo of { "i" => "eki" + seo; _ => ConsonantAdjprefix G5 Sg + seo }; AAdj G5 Pl =>case Predef.take 1 seo of { "i" => "ebi" + seo; _ => ConsonantAdjprefix G5 Pl + seo }; AAdj G6 Sg=>case Predef.take 1 seo of { "i"|"o" => "oru"+ seo; _ => ConsonantAdjprefix G6 Sg + seo }; AAdj G6 Pl =>case Predef.take 1 seo of { "i"|"o" => "ching'"+ seo; _ => ConsonantAdjprefix G6 Pl + seo }; AAdj G7 Sg=>case Predef.take 1 seo of { _ => ConsonantAdjprefix G7 Sg + seo }; AAdj G7 Pl =>case Predef.take 1 seo of { _ => ConsonantAdjprefix G7 Pl + seo }; AAdj G8 Sg=>case Predef.take 1 seo of { "i"|"o" => "obu"+ seo; _ => ConsonantAdjprefix G8 Sg + seo }; AAdj G8 Pl =>case Predef.take 1 seo of { _ => ConsonantAdjprefix G8 Pl + seo }; AAdj G9 Sg=>case Predef.take 1 seo of { "i"|"o" => "oku" + seo; _ => ConsonantAdjprefix G9 Sg + seo }; AAdj G9 Pl =>case Predef.take 1 seo of { _ => ConsonantAdjprefix G9 Pl + seo }; AAdj G10 Sg=>case Predef.take 1 seo of { _ => ConsonantAdjprefix G10 Sg + seo }; AAdj G10 Pl =>[] }}; lregA : Str-> Str -> {s : AForm => Str} = \seo,seoo -> { s = table { AAdj g Sg => ProunSgprefix g + seo ++ seoo; AAdj g Pl=> ProunPlprefix g + seo ++ seoo } } ; iregA : Str-> Str -> {s : AForm => Str} = \seo,seoo -> { s = table { AAdj g Sg=> seo; AAdj g Pl => seoo} }; regV : Str -> Verb = \vika -> { s = table{ True => table{ VInf => vika; VPres g n p => Verbprefix g n p + vika; VPast g n p => Verbprefix g n p + init vika + "ie" ; VFut g n p => Verbfutureprefix g n p + vika } ; False =>table { VInf => "ndi" + vika; VPres g n p => neg (Ag g n p) False Pres + "na" + vika ; VPast g n p => neg (Ag g n p) False Past + "ne" + vika ; VFut g n p => neg (Ag g n p) False Fut + "ka" + vika } }; }; neg : Agr -> Bool ->Tense -> Str = \a,b,t -> let g = getGender a; n=getNumber a; p=getPerson a in case b of {True => [] ; False => negprefix g n t p} ; negprefix : Gender -> Number -> Tense -> Person -> Str =\g,n,t,p-> case of { => "ndi"; => "ndu"; => "ndu"; => "twi"; => "mwi"; => "mai"; => "ndu"; => "i"; => "i"; => "mai"; => "ki"; => "i"; => "kai"; => "tui"; => "vai"; => "kui"; => "i"; <_,_,_,_> => "syi" }; Verbprefix : Gender -> Number -> Person -> Str = \g, n, p -> case of { => "na" ; => "wa" ; => "wa" ; => "twa" ; => "mwa" ; => "ma" ; => "wa" ; => "ya" ; => "kya" ; => "sya" ; => "ya" ; => "ma" ; => "ka" ; => "twa" ; => "va" ; => "kwa" ; => "ya" ; <_,_,_> => "sya" } ; Verbfutureprefix : Gender -> Number -> Person -> Str = \g, n, p -> case of { => "nga" ; => "uka" ; => "uka" ; => "tuka" ; => "muka" ; => "maka" ; => "uka" ; => "ika" ; => "kika" ; => "ika" ; => "ika" ; => "maka" ; => "kaka" ; => "tuka" ; => "vaka" ; => "kuka" ; => "ika" ; <_,_,_> => "ika" } ; Cardtwelveprefix : Gender -> Str = \g -> case of { =>"ba"; =>"ne"; <_> => "i" } ; CardThirteenprefix : Gender -> Str = \g -> case of { | |=>"bat"; | | =>"at"; | =>"is"; =>"nit"; =>"at" } ; Cardsixprefix : Gender -> Str = \g -> case of { =>"o"; |=>"bi"; | || | | | =>"e" } ; Cardfouteenprefix : Gender -> Str = \g -> case of { | |=>"bane"; | | =>"ane"; | =>"inye"; =>"ene"; =>"ene" } ; Cardfifteenprefix : Gender -> Str = \g -> case of { =>"ba"; |=>"bi"; | | =>"a"; | =>"es"; =>"e"; =>"a" } ; Ordoneprefix : Gender -> Str = \g -> case of { | =>"omo"; => "rita"; => "ege"; => "en"; => "oro"; => "aka"; => "abo"; => "oko"; < G10> => "aa" } ; }