1
0
forked from GitHub/gf-rgl
This commit is contained in:
Inari Listenmaa
2018-01-16 10:57:01 +01:00
2 changed files with 40 additions and 4 deletions

View File

@@ -81,7 +81,8 @@ oper
-- This function takes the singular indefinite and definite forms; the
-- gender is computed from the definite form.
mkN : (bil,bilen : Str) -> N ; -- better prediction from both singular and plural
mkN : (bil,bilen : Str) -> N ; -- prediction from both singular indefinite and definite
mkN : (bil,biler : Str) -> Gender -> N ; -- prediction from both singular and plural plus gender
-- This function takes the singular indefinite and definite and the plural
-- indefinite
@@ -91,7 +92,9 @@ oper
-- Worst case: give all four forms. The gender is computed from the
-- last letter of the second form (if "n", then $utrum$, otherwise $neutrum$).
mkN : (dreng,drengen,drenge,drengene : Str) -> N ; -- worst case
mkN : (dreng,drengen,drenge,drengene : Str) -> N ; -- almost worst case, gender guessed from Sg Def
mkN : (dreng,drengen,drenge,drengene : Str) -> Gender -> N ; -- worst case
} ;
@@ -325,6 +328,17 @@ oper
"n" => mk3N x y (init y + "r") ;
_ => mk3N x y x
} ;
mk2gN x y g = case last x of {
"e" => case g of {
Utr => mk4N x (x + "n") y (y + "ne") ;
Neutr => mk4N x (x + "t") y (y + "e")
} ;
_ => case g of {
Utr => mk4N x (x + "en") y (x + "ne") ;
Neutr => mk4N x (x + "et") y (y + "ene")
}
} ;
mk3N x y z = let u = ifTok Str x z "ene" "ne" in mk4N x y z (z + u) ;
@@ -452,7 +466,9 @@ oper
mkN : Str -> N = regN ;
mkN : Str -> Gender -> N = regGenN ;
mkN : (bil,bilen : Str) -> N = mk2N ;
mkN : (bil,biler : Str) -> Gender -> N = mk2gN ;
mkN : (bil,bilen,biler : Str) -> N = mk3N ;
mkN : (dreng,drengen,drenge,drengene : Str) -> Gender -> N = \x,y,z,u,g -> mk4N x y z u ** {g = g} ;
mkN : (dreng,drengen,drenge,drengene : Str) -> N = mk4N ;
} ;
@@ -460,6 +476,7 @@ oper
regN : Str -> N ;
regGenN : Str -> Gender -> N ;
mk2N : (bil,bilen : Str) -> N ;
mk2gN : (bil,biler : Str) -> Gender -> N ;
mk3N : (bil,bilen,biler : Str) -> N ;
mk4N : (dreng,drengen,drenge,drengene : Str) -> N ;

View File

@@ -45,6 +45,7 @@ oper
masculine : Gender ; -- the "en" gender
feminine : Gender ; -- the "ei" gender
neutrum : Gender ; -- the "et" gender
utrum : Gender ; -- the "en" gender, same as masculine
-- To abstract over number names, we define the following.
@@ -82,7 +83,9 @@ oper
mkN : Str -> N ; -- predictable noun, feminine for "-e" otherwise masculine
mkN : Str -> Gender -> N ; -- force gender
mkN : (bil,bilen : Str) -> N ; --%
mkN : (dreng,drengen,drenger,drengene : Str) -> N -- worst case
mkN : (dreng,drengen,drenger,drengene : Str) -> N ; -- worst case, gender guessed
mkN : (dreng,drengen,drenger,drengene : Str) -> Gender -> N ; -- worst case
} ;
@@ -279,6 +282,7 @@ oper
masculine = NUtr Masc ;
feminine = NUtr Fem ;
neutrum = NNeutr ;
utrum = masculine ;
singular = Sg ;
plural = Pl ;
nominative = Nom ;
@@ -305,6 +309,19 @@ oper
NNeutr => mk4N x (x + "et") (x + "") (x + "a")
}
} ;
mk2gN x y g = case last x of {
"e" => case g of {
NUtr Masc => mk4N x (x + "n") y (x + "ne") ;
NUtr Fem => mk4N x (init x + "a") y (x + "ne") ;
NNeutr => mk4N x (x + "t") y (init x + "a") ----
} ;
_ => case g of {
NUtr Masc => mk4N x (x + "en") y (x + "ene") ;
NUtr Fem => mk4N x (x + "a") y (x + "ene") ;
NNeutr => mk4N x (x + "et") y (x + "a")
}
} ;
mk2N x y = case last y of {
"n" => regGenN x masculine ;
@@ -435,15 +452,17 @@ oper
---------
mk2N : (bil,bilen : Str) -> N ;
mk2gN : (bil,bilen : Str) -> Gender -> N ;
mk4N : (dreng,drengen,drenger,drengene : Str) -> N ;
regN : Str -> N ;
regGenN : Str -> Gender -> N ;
mk2N : (bil,bilen : Str) -> N ;
mkN = overload {
mkN : Str -> N = regN ;
mkN : Str -> Gender -> N = regGenN ;
mkN : (bil,bilen : Str) -> N = mk2N ;
mkN : (bil,biler : Str) -> Gender -> N = mk2gN ;
mkN : (dreng,drengen,drenge,drengene : Str) -> Gender -> N = \x,y,z,u,g -> mk4N x y z u ** {g = g} ;
mkN : (dreng,drengen,drenger,drengene : Str) -> N = mk4N
} ;