forked from GitHub/gf-rgl
(Som) Restructure nominal morphology + numerals
This commit is contained in:
+70
-42
@@ -3,15 +3,13 @@ concrete NumeralSom of Numeral = CatSom [Numeral,Digits] **
|
||||
|
||||
oper
|
||||
LinDigit : Type = {
|
||||
s : DForm => CardOrd => State => Str -- TODO: for 1, hal and mid. variation kow-koob implemented with pre.
|
||||
unit : {s : DForm => Str ; ord : Str ; da : DefArticle} ;
|
||||
ten : {s, ord : Str ; da : DefArticle}
|
||||
} ;
|
||||
|
||||
mkNum3 : (ucard,tcard,uord : Str) -> Gender -> LinDigit = \uc,tc,uo,g -> {s =
|
||||
\\df,co,s => case <co,df,s> of {
|
||||
<NOrd,Unit,_> => uo ;
|
||||
<NOrd,Ten, _> => tc + "aad" ;
|
||||
<NCard,Unit,s> => nf2state (mkNg uc g) ! s ;
|
||||
<NCard,Ten, s> => nf2state (mkN1 tc) ! s }
|
||||
mkNum3 : (ucard,tcard,uord : Str) -> DefArticle -> LinDigit = \uc,tc,uo,ud -> {
|
||||
unit = {s = \\df => uc ; ord = uo ; da = ud} ;
|
||||
ten = {s = tc ; ord = tc + "aad" ; da = M KA}
|
||||
} ;
|
||||
|
||||
mkNum2 : (ucard,tcard : Str) -> LinDigit = \uc,tc ->
|
||||
@@ -19,20 +17,25 @@ oper
|
||||
x + "a" => x + "aad" ; -- ??
|
||||
x + #v + c@#c => x + c + "aad" ;
|
||||
_ => uc + "aad" } ;
|
||||
in mkNum3 uc tc uo Fem ;
|
||||
in mkNum3 uc tc uo (F DA) ;
|
||||
|
||||
mkNum2Masc : (ucard,tcard : Str) -> LinDigit = \uc,tc ->
|
||||
let uo : Str = case uc of {
|
||||
x + "a" => x + "aad" ; -- ??
|
||||
x + #v + c@#c => x + c + "aad" ;
|
||||
_ => uc + "aad" } ;
|
||||
in mkNum3 uc tc uo Masc ;
|
||||
in mkNum3 uc tc uo (M KA) ;
|
||||
|
||||
|
||||
lincat
|
||||
Digit = LinDigit ;
|
||||
Sub10, Sub100, Sub1000, Sub1000000 =
|
||||
{s : CardOrd => State => Str ; n : Number} ;
|
||||
Sub10, Sub100, Sub1000, Sub1000000 = {
|
||||
s : DForm => Str ;
|
||||
thousand : Str ; -- TODO figure out if this really works so
|
||||
ord : Str ;
|
||||
da : DefArticle ;
|
||||
n : Number
|
||||
} ;
|
||||
|
||||
----------------------------------------------------------------------------
|
||||
|
||||
@@ -40,9 +43,10 @@ lincat
|
||||
-- num : Sub1000000 -> Numeral ;
|
||||
lin num x = x ;
|
||||
|
||||
oper kow : Str = "kow" ; --pre {"iyo" => "koob" ; _ => "kow"} ;
|
||||
|
||||
oper n1 = mkNum3 kow "toban" "kowaad" Fem ;
|
||||
oper kow : DForm => Str = table {Kow => "kow" ; Hal => "hal" ; Mid => "mid"} ;
|
||||
oper n1 : LinDigit = let one : LinDigit = mkNum2 "kow" "toban" in one ** {
|
||||
unit = one.unit ** {s = kow}
|
||||
} ;
|
||||
lin n2 = mkNum2 "laba" "labaatan" ;
|
||||
lin n3 = mkNum2 "saddex" "soddon" ;
|
||||
lin n4 = mkNum2 "afar" "afartan";
|
||||
@@ -50,42 +54,67 @@ lin n5 = mkNum2 "shan" "konton";
|
||||
lin n6 = mkNum2 "lix" "lixdan" ;
|
||||
lin n7 = mkNum2 "toddoba" "toddobaatan" ;
|
||||
lin n8 = mkNum2Masc "siddeed" "siddeetan" ;
|
||||
lin n9 = mkNum2Masc "sagaal" "sagaaashan" ;
|
||||
lin n9 = mkNum2Masc "sagaal" "sagaashan" ;
|
||||
|
||||
lin pot01 = {s = n1.s ! Unit ; n = Sg} ;
|
||||
lin pot01 = n1.unit ** {n = Sg ; thousand = []} ;
|
||||
|
||||
lin pot0 d = {s = d.s ! Unit ; n = Pl} ;
|
||||
lin pot0 d = d.unit ** {n = Pl ; thousand = []} ;
|
||||
|
||||
lin pot110 = {s = n1.s ! Ten ; n = Pl} ;
|
||||
lin pot111 = {s = \\co,s => "koob iyo" ++ n1.s ! Ten ! co ! s ; n = Pl} ;
|
||||
lin pot1to19 d = {s = \\co,s => d.s ! Unit ! co ! s ++ n1.s ! Ten ! co ! s ; n=Pl} ;
|
||||
lin pot110 = n1.ten ** {
|
||||
s = \\df => n1.ten.s ;
|
||||
thousand = [] ;
|
||||
n = Pl
|
||||
} ;
|
||||
lin pot111 = {
|
||||
s = \\_ => "koob iyo" ++ n1.ten.s ;
|
||||
ord = "koob iyo" ++ n1.ten.ord ;
|
||||
thousand = [] ;
|
||||
da = M KA ; -- TODO check
|
||||
n = Pl
|
||||
} ;
|
||||
lin pot1to19 d = {
|
||||
s = \\_ => d.unit.s ! Kow ++ "iyo" ++ n1.ten.s ;
|
||||
thousand = [] ;
|
||||
ord = d.unit.s ! Kow ++ "iyo" ++ n1.ten.ord ;
|
||||
da = M KA ; -- TODO check
|
||||
n = Pl
|
||||
} ;
|
||||
lin pot0as1 n = n ;
|
||||
lin pot1 d = {s = d.s ! Ten ; n=Pl};
|
||||
-- {s = d.s ! Unit ;
|
||||
-- n = Pl} ;
|
||||
lin pot1plus d e = {
|
||||
s = \\co,s => e.s ! co ! Indefinite ++ "iyo" ++ d.s ! Ten ! co ! s ;
|
||||
n = Pl} ;
|
||||
|
||||
lin pot1 d = d.ten ** {
|
||||
s = \\df => d.ten.s ;
|
||||
thousand = [] ;
|
||||
n = Pl
|
||||
} ;
|
||||
lin pot1plus d e = d.ten ** {
|
||||
s = \\b => d.unit.s ! Kow ++ "iyo" ++ e.s ! b ;
|
||||
ord = d.unit.s ! Kow ++ "iyo" ++ e.ord ; -- TODO check
|
||||
thousand = [] ;
|
||||
n = Pl ;
|
||||
} ;
|
||||
lin pot1as2 n = n ;
|
||||
lin pot2 d = d ** {s = \\co,s => d.s ! co ! s ++ "boqol"} ; -- TODO
|
||||
lin pot2plus d e = {
|
||||
s = \\co,s => d.s ! co ! Indefinite ++ "boqol iyo" ++ e.s ! co ! s ;
|
||||
n = Pl} ;
|
||||
lin pot2 d = d ** {
|
||||
thousand = "boqol" ; -- TODO check
|
||||
ord = d.s ! Kow ++ "boqlaad"
|
||||
} ; -- TODO what's the def. art. allomorph?
|
||||
lin pot2plus d e = d ** {
|
||||
s = \\b => d.s ! b ++ "boqol iyo" ++ e.s ! b ;
|
||||
ord = d.ord ++ "boqol iyo" ++ e.ord ;
|
||||
n = Pl} ;
|
||||
lin pot2as3 n = n ;
|
||||
lin pot3 n = n ;
|
||||
|
||||
lin pot3plus n m = {
|
||||
s = \\co,s => n.s ! co ! s ++ "iyo" ++ m.s ! co ! s ;
|
||||
n = n.n } ;
|
||||
lin pot3 n = n ** {
|
||||
thousand = "kun" ;
|
||||
ord = n.s ! Kow ++ "kunaad" ;
|
||||
--da = M KA ; -- TODO check
|
||||
n = Pl } ;
|
||||
|
||||
lin pot3plus n m = n ** {
|
||||
s = \\b => n.s ! b ++ "kun iyo" ++ m.s ! b ;
|
||||
ord = n.ord ++ "kun iyo" ++ m.ord ;
|
||||
n = Pl} ;
|
||||
|
||||
--TODO:
|
||||
-- my three cats
|
||||
-- * saddexd &+ ayg &+ a bisadood
|
||||
-- => saddexd &+ ayd &+ a bisadood
|
||||
-- my *two* thousand small cats
|
||||
-- => laba kun oo bisadood oo yar (kun is an attribute, bisadood is an attribute)
|
||||
-- two thousand small cats
|
||||
-- => laba kun oo bisadood oo yar (kun and bisadood are both attributes)
|
||||
----------------------------------------------------------------------------
|
||||
|
||||
lincat Dig = TDigit ;
|
||||
@@ -100,7 +129,6 @@ oper
|
||||
n = num } ;
|
||||
|
||||
|
||||
|
||||
lin D_0 = mkDig "0" ;
|
||||
lin D_1 = mk2Dig "1" Sg ;
|
||||
lin D_2 = mkDig "2" ;
|
||||
|
||||
Reference in New Issue
Block a user