forked from GitHub/gf-core
some new overload cases in ParadigmsEng
This commit is contained in:
@@ -2123,7 +2123,7 @@ ending with an //s// and used in the formation of both plural nouns and
|
|||||||
third-person present-tense verbs.
|
third-person present-tense verbs.
|
||||||
```
|
```
|
||||||
add_s : Str -> Str = \w -> case w of {
|
add_s : Str -> Str = \w -> case w of {
|
||||||
_ + "oo" => s + "s" ; -- bamboo
|
_ + "oo" => w + "s" ; -- bamboo
|
||||||
_ + ("s" | "z" | "x" | "sh" | "o") => w + "es" ; -- bus, hero
|
_ + ("s" | "z" | "x" | "sh" | "o") => w + "es" ; -- bus, hero
|
||||||
_ + ("a" | "o" | "u" | "e") + "y" => w + "s" ; -- boy
|
_ + ("a" | "o" | "u" | "e") + "y" => w + "s" ; -- boy
|
||||||
x + "y" => x + "ies" ; -- fly
|
x + "y" => x + "ies" ; -- fly
|
||||||
|
|||||||
@@ -118,26 +118,43 @@ oper
|
|||||||
|
|
||||||
--3 Proper names and noun phrases
|
--3 Proper names and noun phrases
|
||||||
--
|
--
|
||||||
-- Proper names, with a regular genitive, are formed as follows
|
-- Proper names, with a regular genitive, are formed from strings.
|
||||||
|
|
||||||
regPN : Str -> PN ;
|
mkPN : overload {
|
||||||
regGenPN : Str -> Gender -> PN ; -- John, John's
|
|
||||||
|
|
||||||
-- Sometimes you can reuse a common noun as a proper name, e.g. "Bank".
|
mkPN : Str -> PN ;
|
||||||
|
|
||||||
nounPN : N -> PN ;
|
-- Sometimes a common noun can be reused as a proper name, e.g. "Bank"
|
||||||
|
|
||||||
|
mkPN : N -> PN
|
||||||
|
} ;
|
||||||
|
|
||||||
|
|
||||||
--2 Adjectives
|
--2 Adjectives
|
||||||
|
|
||||||
mkA : overload {
|
mkA : overload {
|
||||||
-- For regular adjectives, the adverbial form is derived. This holds
|
|
||||||
-- even for cases with the variation "happy - happily".
|
-- For regular adjectives, the adverbial and comparison forms are derived. This holds
|
||||||
mkA : Str -> A ;
|
-- even for cases with the variations "happy - happily - happier - happiest",
|
||||||
-- Non-comparison one-place adjectives need two forms: one for
|
-- "free - freely - freer - freest", and "rude - rudest".
|
||||||
-- the adjectival and one for the adverbial form ("free - freely")
|
|
||||||
mkA : (free,freely : Str) -> A ;
|
mkA : (happy : Str) -> A ;
|
||||||
};
|
|
||||||
|
-- However, the duplication of the final consonant cannot be predicted,
|
||||||
|
-- but a separate case is used to give the comparative
|
||||||
|
|
||||||
|
mkA : (fat,fatter : Str) -> A ;
|
||||||
|
|
||||||
|
-- As many as four forms may be needed.
|
||||||
|
|
||||||
|
mkA : (good,better,best,well : Str) -> A
|
||||||
|
} ;
|
||||||
|
|
||||||
|
-- To force comparison to be formed by "more - most",
|
||||||
|
-- the following function is used:
|
||||||
|
|
||||||
|
compoundA : A -> A ; -- -/more/most ridiculous
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
--3 Two-place adjectives
|
--3 Two-place adjectives
|
||||||
@@ -146,31 +163,6 @@ oper
|
|||||||
|
|
||||||
mkA2 : A -> Prep -> A2 ;
|
mkA2 : A -> Prep -> A2 ;
|
||||||
|
|
||||||
-- Comparison adjectives may two more forms.
|
|
||||||
|
|
||||||
ADeg : Type ;
|
|
||||||
|
|
||||||
mkADeg : (good,better,best,well : Str) -> ADeg ;
|
|
||||||
|
|
||||||
-- The regular pattern recognizes two common variations:
|
|
||||||
-- "-e" ("rude" - "ruder" - "rudest") and
|
|
||||||
-- "-y" ("happy - happier - happiest - happily")
|
|
||||||
|
|
||||||
regADeg : Str -> ADeg ; -- long, longer, longest
|
|
||||||
|
|
||||||
-- However, the duplication of the final consonant is nor predicted,
|
|
||||||
-- but a separate pattern is used:
|
|
||||||
|
|
||||||
duplADeg : Str -> ADeg ; -- fat, fatter, fattest
|
|
||||||
|
|
||||||
-- If comparison is formed by "more", "most", as in general for
|
|
||||||
-- long adjective, the following pattern is used:
|
|
||||||
|
|
||||||
compoundADeg : A -> ADeg ; -- -/more/most ridiculous
|
|
||||||
|
|
||||||
-- From a given $ADeg$, it is possible to get back to $A$.
|
|
||||||
|
|
||||||
adegA : ADeg -> A ;
|
|
||||||
|
|
||||||
|
|
||||||
--2 Adverbs
|
--2 Adverbs
|
||||||
@@ -200,32 +192,47 @@ oper
|
|||||||
|
|
||||||
-- Verbs are constructed by the function $mkV$, which takes a varying
|
-- Verbs are constructed by the function $mkV$, which takes a varying
|
||||||
-- number of arguments.
|
-- number of arguments.
|
||||||
|
|
||||||
mkV : overload {
|
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 a sibilant
|
||||||
-- ("fix - fixes", etc).
|
-- ("kiss-"kisses", "jazz-jazzes", "rush-rushes", "munch - munches",
|
||||||
|
-- "fix - fixes").
|
||||||
|
|
||||||
mkV : (cry : Str) -> V ;
|
mkV : (cry : Str) -> V ;
|
||||||
|
|
||||||
-- Give the present and past forms for regular verbs where
|
-- Give the present and past forms for regular verbs where
|
||||||
-- the last letter is duplicated in some forms,
|
-- the last letter is duplicated in some forms,
|
||||||
-- e.g. "rip - ripped - ripping".
|
-- e.g. "rip - ripped - ripping".
|
||||||
|
|
||||||
mkV : (stop, stopped : Str) -> V ;
|
mkV : (stop, stopped : Str) -> V ;
|
||||||
|
|
||||||
-- There is an extensive list of irregular verbs in the module $IrregularEng$.
|
-- There is an extensive list of irregular verbs in the module $IrregularEng$.
|
||||||
-- In practice, it is enough to give three forms,
|
-- In practice, it is enough to give three forms,
|
||||||
-- e.g. "drink - drank - drunk".
|
-- e.g. "drink - drank - drunk".
|
||||||
|
|
||||||
mkV : (drink, drank, drunk : Str) -> V ;
|
mkV : (drink, drank, drunk : Str) -> V ;
|
||||||
|
|
||||||
-- Irregular verbs with duplicated consonant in the present participle.
|
-- Irregular verbs with duplicated consonant in the present participle.
|
||||||
mkV : (run, ran, run, running : Str) -> V ;
|
|
||||||
|
mkV : (run, ran, run, running : Str) -> V ;
|
||||||
|
|
||||||
-- Except for "be", the worst case needs five forms: the infinitive and
|
-- Except for "be", the worst case needs five forms: the infinitive and
|
||||||
-- the third person singular present, the past indicative, and the
|
-- the third person singular present, the past indicative, and the
|
||||||
-- past and present participles.
|
-- past and present participles.
|
||||||
|
|
||||||
mkV : (go, goes, went, gone, going : Str) -> V
|
mkV : (go, goes, went, gone, going : Str) -> V
|
||||||
};
|
};
|
||||||
|
|
||||||
-- Verbs with a particle.
|
-- Verbs with a particle.
|
||||||
-- The particle, such as in "switch on", is given as a string.
|
-- The particle, such as in "switch on", is given as a string.
|
||||||
|
|
||||||
partV : V -> Str -> V ;
|
partV : V -> Str -> V ;
|
||||||
|
|
||||||
-- Reflexive verbs.
|
-- Reflexive verbs.
|
||||||
-- By default, verbs are not reflexive; this function makes them that.
|
-- By default, verbs are not reflexive; this function makes them that.
|
||||||
|
|
||||||
reflV : V -> V ;
|
reflV : V -> V ;
|
||||||
|
|
||||||
--3 Two-place verbs
|
--3 Two-place verbs
|
||||||
@@ -296,26 +303,19 @@ oper
|
|||||||
Preposition : Type = Str ; -- obsolete
|
Preposition : Type = Str ; -- obsolete
|
||||||
|
|
||||||
regN = \ray ->
|
regN = \ray ->
|
||||||
let
|
let rays = add_s ray
|
||||||
ra = Predef.tk 1 ray ;
|
|
||||||
y = Predef.dp 1 ray ;
|
|
||||||
r = Predef.tk 2 ray ;
|
|
||||||
ay = Predef.dp 2 ray ;
|
|
||||||
rays =
|
|
||||||
case y of {
|
|
||||||
"y" => y2ie ray "s" ;
|
|
||||||
"s" => ray + "es" ;
|
|
||||||
"z" => ray + "es" ;
|
|
||||||
"x" => ray + "es" ;
|
|
||||||
_ => case ay of {
|
|
||||||
"sh" => ray + "es" ;
|
|
||||||
"ch" => ray + "es" ;
|
|
||||||
_ => ray + "s"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
in
|
in
|
||||||
mk2N ray rays ;
|
mk2N ray rays ;
|
||||||
|
|
||||||
|
|
||||||
|
add_s : Str -> Str = \w -> case w of {
|
||||||
|
_ + ("io" | "oo") => w + "s" ; -- radio, bamboo
|
||||||
|
_ + ("s" | "z" | "x" | "sh" | "ch" | "o") => w + "es" ; -- bus, hero
|
||||||
|
_ + ("a" | "o" | "u" | "e") + "y" => w + "s" ; -- boy
|
||||||
|
x + "y" => x + "ies" ; -- fly
|
||||||
|
_ => w + "s" -- car
|
||||||
|
} ;
|
||||||
|
|
||||||
mk2N = \man,men ->
|
mk2N = \man,men ->
|
||||||
let mens = case last men of {
|
let mens = case last men of {
|
||||||
"s" => men + "'" ;
|
"s" => men + "'" ;
|
||||||
@@ -331,6 +331,12 @@ oper
|
|||||||
|
|
||||||
compoundN s n = {s = \\x,y => s ++ n.s ! x ! y ; g=n.g ; lock_N = <>} ;
|
compoundN s n = {s = \\x,y => s ++ n.s ! x ! y ; g=n.g ; lock_N = <>} ;
|
||||||
|
|
||||||
|
mkPN = overload {
|
||||||
|
mkPN : Str -> PN = regPN ;
|
||||||
|
mkPN : N -> PN = nounPN
|
||||||
|
} ;
|
||||||
|
|
||||||
|
|
||||||
mkN2 = \n,p -> n ** {lock_N2 = <> ; c2 = p.s} ;
|
mkN2 = \n,p -> n ** {lock_N2 = <> ; c2 = p.s} ;
|
||||||
regN2 n = mkN2 (regN n) (mkPrep "of") ;
|
regN2 n = mkN2 (regN n) (mkPrep "of") ;
|
||||||
mkN3 = \n,p,q -> n ** {lock_N3 = <> ; c2 = p.s ; c3 = q.s} ;
|
mkN3 = \n,p,q -> n ** {lock_N3 = <> ; c2 = p.s ; c3 = q.s} ;
|
||||||
@@ -352,7 +358,7 @@ oper
|
|||||||
nounPN n = {s = n.s ! singular ; g = n.g ; lock_PN = <>} ;
|
nounPN n = {s = n.s ! singular ; g = n.g ; lock_PN = <>} ;
|
||||||
|
|
||||||
mk2A 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 = regADeg a ** {lock_A = <>} ;
|
||||||
|
|
||||||
mkA2 a p = a ** {c2 = p.s ; lock_A2 = <>} ;
|
mkA2 a p = a ** {c2 = p.s ; lock_A2 = <>} ;
|
||||||
|
|
||||||
@@ -369,8 +375,9 @@ oper
|
|||||||
"e" => happy ;
|
"e" => happy ;
|
||||||
_ => happy + "e"
|
_ => happy + "e"
|
||||||
} ;
|
} ;
|
||||||
happily = case y of {
|
happily : Str = case happy of {
|
||||||
"y" => happ + "ily" ;
|
_ + "y" => happ + "ily" ;
|
||||||
|
_ + "ll" => happy + "y" ;
|
||||||
_ => happy + "ly"
|
_ => happy + "ly"
|
||||||
} ;
|
} ;
|
||||||
in mkADeg happy (happie + "r") (happie + "st") happily ;
|
in mkADeg happy (happie + "r") (happie + "st") happily ;
|
||||||
@@ -495,8 +502,13 @@ oper
|
|||||||
|
|
||||||
mkA = overload {
|
mkA = overload {
|
||||||
mkA : Str -> A = regA ;
|
mkA : Str -> A = regA ;
|
||||||
mkA : (free,freely : Str) -> A = mk2A
|
mkA : (fat,fatter : Str) -> A = \fat,fatter ->
|
||||||
};
|
mkAdjective fat fatter (init fatter + "st") (fat + "ly") ** {lock_A = <>} ;
|
||||||
|
mkA : (good,better,best,well : Str) -> A = \a,b,c,d ->
|
||||||
|
mkAdjective a b c d ** {lock_A = <>}
|
||||||
|
} ;
|
||||||
|
|
||||||
|
compoundA = compoundADeg ;
|
||||||
|
|
||||||
|
|
||||||
mk5V : (go, goes, went, gone, going : Str) -> V ;
|
mk5V : (go, goes, went, gone, going : Str) -> V ;
|
||||||
@@ -527,4 +539,42 @@ oper
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
---- obsolete
|
||||||
|
|
||||||
|
-- Comparison adjectives may two more forms.
|
||||||
|
|
||||||
|
ADeg : Type ;
|
||||||
|
|
||||||
|
mkADeg : (good,better,best,well : Str) -> ADeg ;
|
||||||
|
|
||||||
|
-- The regular pattern recognizes two common variations:
|
||||||
|
-- "-e" ("rude" - "ruder" - "rudest") and
|
||||||
|
-- "-y" ("happy - happier - happiest - happily")
|
||||||
|
|
||||||
|
regADeg : Str -> ADeg ; -- long, longer, longest
|
||||||
|
|
||||||
|
-- However, the duplication of the final consonant is nor predicted,
|
||||||
|
-- but a separate pattern is used:
|
||||||
|
|
||||||
|
duplADeg : Str -> ADeg ; -- fat, fatter, fattest
|
||||||
|
|
||||||
|
-- If comparison is formed by "more", "most", as in general for
|
||||||
|
-- long adjective, the following pattern is used:
|
||||||
|
|
||||||
|
compoundADeg : A -> ADeg ; -- -/more/most ridiculous
|
||||||
|
|
||||||
|
-- From a given $ADeg$, it is possible to get back to $A$.
|
||||||
|
|
||||||
|
adegA : ADeg -> A ;
|
||||||
|
|
||||||
|
|
||||||
|
regPN : Str -> PN ;
|
||||||
|
regGenPN : Str -> Gender -> PN ; -- John, John's
|
||||||
|
|
||||||
|
-- Sometimes you can reuse a common noun as a proper name, e.g. "Bank".
|
||||||
|
|
||||||
|
nounPN : N -> PN ;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
} ;
|
} ;
|
||||||
|
|||||||
Reference in New Issue
Block a user