forked from GitHub/gf-core
Overloaded mkA, mkV and mkV2 in ParadigmsEng. Not all paradigms could be included, because of type conflicts, e.g. with the dupl* forms.
This commit is contained in:
@@ -142,16 +142,16 @@ oper
|
|||||||
|
|
||||||
--2 Adjectives
|
--2 Adjectives
|
||||||
|
|
||||||
-- Non-comparison one-place adjectives need two forms: one for
|
mkA : overload {
|
||||||
-- the adjectival and one for the adverbial form ("free - freely")
|
|
||||||
|
|
||||||
mkA : (free,freely : Str) -> A ;
|
|
||||||
|
|
||||||
-- For regular adjectives, the adverbial form is derived. This holds
|
-- For regular adjectives, the adverbial form is derived. This holds
|
||||||
-- even for cases with the variation "happy - happily".
|
-- even for cases with the variation "happy - happily".
|
||||||
|
mkA : Str -> A ;
|
||||||
|
-- Non-comparison one-place adjectives need two forms: one for
|
||||||
|
-- the adjectival and one for the adverbial form ("free - freely")
|
||||||
|
mkA : (free,freely : Str) -> A ;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
regA : Str -> A ;
|
|
||||||
|
|
||||||
--3 Two-place adjectives
|
--3 Two-place adjectives
|
||||||
--
|
--
|
||||||
-- Two-place adjectives need a preposition for their second argument.
|
-- Two-place adjectives need a preposition for their second argument.
|
||||||
@@ -209,17 +209,28 @@ oper
|
|||||||
|
|
||||||
--2 Verbs
|
--2 Verbs
|
||||||
--
|
--
|
||||||
-- Except for "be", the worst case needs five forms: the infinitive and
|
|
||||||
-- the third person singular present, the past indicative, and the
|
|
||||||
-- past and present participles.
|
|
||||||
|
|
||||||
mkV : (go, goes, went, gone, going : Str) -> V ;
|
|
||||||
|
|
||||||
|
mkV : overload {
|
||||||
-- The regular verb function recognizes the special cases where the last
|
-- The regular verb function recognizes the special cases where the last
|
||||||
-- character is "y" ("cry - cries" but "buy - buys") or "s", "sh", "x", "z"
|
-- character is "y" ("cry - cries" but "buy - buys") or "s", "sh", "x", "z"
|
||||||
-- ("fix - fixes", etc).
|
-- ("fix - fixes", etc).
|
||||||
|
mkV : Str -> V ;
|
||||||
regV : Str -> V ;
|
-- There is an extensive list of irregular verbs in the module $IrregularEng$.
|
||||||
|
-- In practice, it is enough to give three forms,
|
||||||
|
-- e.g. "drink - drank - drunk".
|
||||||
|
mkV : (drink, drank, drunk : Str) -> V ;
|
||||||
|
-- Except for "be", the worst case needs five forms: the infinitive and
|
||||||
|
-- the third person singular present, the past indicative, and the
|
||||||
|
-- past and present participles.
|
||||||
|
mkV : (go, goes, went, gone, going : Str) -> V ;
|
||||||
|
-- Verbs with a particle.
|
||||||
|
-- The particle, such as in "switch on", is given as a string.
|
||||||
|
mkV : V -> Str -> V ;
|
||||||
|
-- Reflexive verbs.
|
||||||
|
-- By default, verbs are not reflexive; this function makes them that.
|
||||||
|
mkV : V -> V
|
||||||
|
};
|
||||||
|
|
||||||
-- The following variant duplicates the last letter in the forms like
|
-- The following variant duplicates the last letter in the forms like
|
||||||
-- "rip - ripped - ripping".
|
-- "rip - ripped - ripping".
|
||||||
@@ -235,26 +246,16 @@ oper
|
|||||||
irregDuplV : (get, got, gotten : Str) -> V ;
|
irregDuplV : (get, got, gotten : Str) -> V ;
|
||||||
|
|
||||||
|
|
||||||
--3 Verbs with a particle.
|
|
||||||
--
|
|
||||||
-- The particle, such as in "switch on", is given as a string.
|
|
||||||
|
|
||||||
partV : V -> Str -> V ;
|
|
||||||
|
|
||||||
--3 Reflexive verbs
|
|
||||||
--
|
|
||||||
-- By default, verbs are not reflexive; this function makes them that.
|
|
||||||
|
|
||||||
reflV : V -> V ;
|
|
||||||
|
|
||||||
--3 Two-place verbs
|
--3 Two-place verbs
|
||||||
--
|
--
|
||||||
-- Two-place verbs need a preposition, except the special case with direct object.
|
-- Two-place verbs need a preposition, except the special case with direct object.
|
||||||
-- (transitive verbs). Notice that a particle comes from the $V$.
|
-- (transitive verbs). Notice that a particle comes from the $V$.
|
||||||
|
|
||||||
mkV2 : V -> Prep -> V2 ;
|
mkV2 : overload {
|
||||||
|
mkV2 : V -> Prep -> V2 ; -- believe in
|
||||||
dirV2 : V -> V2 ;
|
mkV2 : V -> V2 -- kill
|
||||||
|
};
|
||||||
|
|
||||||
--3 Three-place verbs
|
--3 Three-place verbs
|
||||||
--
|
--
|
||||||
@@ -361,7 +362,7 @@ oper
|
|||||||
mkNP x y n g = {s = table {Gen => x ; _ => y} ; a = agrP3 n ;
|
mkNP x y n g = {s = table {Gen => x ; _ => y} ; a = agrP3 n ;
|
||||||
lock_NP = <>} ;
|
lock_NP = <>} ;
|
||||||
|
|
||||||
mkA a b = mkAdjective a a a b ** {lock_A = <>} ;
|
mk2A a b = mkAdjective a a a b ** {lock_A = <>} ;
|
||||||
regA a = regAdjective a ** {lock_A = <>} ;
|
regA a = regAdjective a ** {lock_A = <>} ;
|
||||||
|
|
||||||
mkA2 a p = a ** {c2 = p.s ; lock_A2 = <>} ;
|
mkA2 a p = a ** {c2 = p.s ; lock_A2 = <>} ;
|
||||||
@@ -402,7 +403,7 @@ oper
|
|||||||
mkPrep p = ss p ** {lock_Prep = <>} ;
|
mkPrep p = ss p ** {lock_Prep = <>} ;
|
||||||
noPrep = mkPrep [] ;
|
noPrep = mkPrep [] ;
|
||||||
|
|
||||||
mkV a b c d e = mkVerb a b c d e ** {s1 = [] ; lock_V = <>} ;
|
mk5V a b c d e = mkVerb a b c d e ** {s1 = [] ; lock_V = <>} ;
|
||||||
|
|
||||||
regV cry =
|
regV cry =
|
||||||
let
|
let
|
||||||
@@ -421,7 +422,7 @@ oper
|
|||||||
} ;
|
} ;
|
||||||
_ => cry + "ing"
|
_ => cry + "ing"
|
||||||
}
|
}
|
||||||
in mkV cry cries cried cried crying ;
|
in mk5V cry cries cried cried crying ;
|
||||||
|
|
||||||
regDuplV fit =
|
regDuplV fit =
|
||||||
case last fit of {
|
case last fit of {
|
||||||
@@ -429,23 +430,23 @@ oper
|
|||||||
Predef.error (["final duplication makes no sense for"] ++ fit) ;
|
Predef.error (["final duplication makes no sense for"] ++ fit) ;
|
||||||
t =>
|
t =>
|
||||||
let fitt = fit + t in
|
let fitt = fit + t in
|
||||||
mkV fit (fit + "s") (fitt + "ed") (fitt + "ed") (fitt + "ing")
|
mk5V fit (fit + "s") (fitt + "ed") (fitt + "ed") (fitt + "ing")
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
irregV x y z = let reg = (regV x).s in
|
irregV x y z = let reg = (regV x).s in
|
||||||
mkV x (reg ! VPres) y z (reg ! VPresPart) ** {s1 = [] ; lock_V = <>} ;
|
mk5V x (reg ! VPres) y z (reg ! VPresPart) ** {s1 = [] ; lock_V = <>} ;
|
||||||
|
|
||||||
irregDuplV fit y z =
|
irregDuplV fit y z =
|
||||||
let
|
let
|
||||||
fitting = (regDuplV fit).s ! VPresPart
|
fitting = (regDuplV fit).s ! VPresPart
|
||||||
in
|
in
|
||||||
mkV fit (fit + "s") y z fitting ;
|
mk5V fit (fit + "s") y z fitting ;
|
||||||
|
|
||||||
partV v p = verbPart v p ** {lock_V = <>} ;
|
partV v p = verbPart v p ** {lock_V = <>} ;
|
||||||
reflV v = {s = v.s ; part = v.part ; lock_V = v.lock_V ; isRefl = True} ;
|
reflV v = {s = v.s ; part = v.part ; lock_V = v.lock_V ; isRefl = True} ;
|
||||||
|
|
||||||
mkV2 v p = v ** {s = v.s ; s1 = v.s1 ; c2 = p.s ; lock_V2 = <>} ;
|
prepV2 v p = v ** {s = v.s ; s1 = v.s1 ; c2 = p.s ; lock_V2 = <>} ;
|
||||||
dirV2 v = mkV2 v noPrep ;
|
dirV2 v = prepV2 v noPrep ;
|
||||||
|
|
||||||
mkV3 v p q = v ** {s = v.s ; s1 = v.s1 ; c2 = p.s ; c3 = q.s ; lock_V3 = <>} ;
|
mkV3 v p q = v ** {s = v.s ; s1 = v.s1 ; c2 = p.s ; c3 = q.s ; lock_V3 = <>} ;
|
||||||
dirV3 v p = mkV3 v noPrep p ;
|
dirV3 v p = mkV3 v noPrep p ;
|
||||||
@@ -464,11 +465,11 @@ oper
|
|||||||
A2V : Type = A2 ;
|
A2V : Type = A2 ;
|
||||||
|
|
||||||
mkV0 v = v ** {lock_V = <>} ;
|
mkV0 v = v ** {lock_V = <>} ;
|
||||||
mkV2S v p = mkV2 v p ** {lock_V2 = <>} ;
|
mkV2S v p = prepV2 v p ** {lock_V2 = <>} ;
|
||||||
mkV2V v p t = mkV2 v p ** {s4 = t ; lock_V2 = <>} ;
|
mkV2V v p t = prepV2 v p ** {s4 = t ; lock_V2 = <>} ;
|
||||||
mkVA v = v ** {lock_VA = <>} ;
|
mkVA v = v ** {lock_VA = <>} ;
|
||||||
mkV2A v p = mkV2 v p ** {lock_V2A = <>} ;
|
mkV2A v p = prepV2 v p ** {lock_V2A = <>} ;
|
||||||
mkV2Q v p = mkV2 v p ** {lock_V2 = <>} ;
|
mkV2Q v p = prepV2 v p ** {lock_V2 = <>} ;
|
||||||
|
|
||||||
mkAS v = v ** {lock_A = <>} ;
|
mkAS v = v ** {lock_A = <>} ;
|
||||||
mkA2S v p = mkA2 v p ** {lock_A = <>} ;
|
mkA2S v p = mkA2 v p ** {lock_A = <>} ;
|
||||||
@@ -493,4 +494,35 @@ oper
|
|||||||
} ;
|
} ;
|
||||||
|
|
||||||
|
|
||||||
|
mk2A : (free,freely : Str) -> A ;
|
||||||
|
regA : Str -> A ;
|
||||||
|
|
||||||
|
mkA = overload {
|
||||||
|
mkA : Str -> A = regA ;
|
||||||
|
mkA : (free,freely : Str) -> A = mk2A
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
mk5V : (go, goes, went, gone, going : Str) -> V ;
|
||||||
|
regV : Str -> V ;
|
||||||
|
partV : V -> Str -> V ;
|
||||||
|
reflV : V -> V ;
|
||||||
|
|
||||||
|
mkV = overload {
|
||||||
|
mkV : Str -> V = regV ;
|
||||||
|
mkV : (drink, drank, drunk : Str) -> V = irregV ;
|
||||||
|
mkV : (go, goes, went, gone, going : Str) -> V = mk5V ;
|
||||||
|
mkV : V -> Str -> V = partV ;
|
||||||
|
mkV : V -> V = reflV
|
||||||
|
};
|
||||||
|
|
||||||
|
prepV2 : V -> Prep -> V2 ;
|
||||||
|
dirV2 : V -> V2 ;
|
||||||
|
|
||||||
|
mkV2 = overload {
|
||||||
|
mkV2 : V -> Prep -> V2 = prepV2;
|
||||||
|
mkV2 : V -> V2 = dirV2
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
} ;
|
} ;
|
||||||
|
|||||||
Reference in New Issue
Block a user