mirror of
https://github.com/GrammaticalFramework/gf-core.git
synced 2026-04-22 19:22:50 -06:00
overload in ParadigmsSpa
This commit is contained in:
@@ -26,3 +26,23 @@ nouns (``N``), adjectives (``A``), and verbs (``V``).
|
|||||||
mkV : (go,goes,went,gone,going : Str) -> V
|
mkV : (go,goes,went,gone,going : Str) -> V
|
||||||
```
|
```
|
||||||
|
|
||||||
|
=French=
|
||||||
|
|
||||||
|
```
|
||||||
|
mkN : (cheval : Str) -> N ; -- pas, prix, nez, bijou, cheval
|
||||||
|
mkN : (foie : Str) -> Gender -> N ;
|
||||||
|
mkN : (oeil,yeux : Str) -> Gender -> N ;
|
||||||
|
mkN : N -> Str -> N
|
||||||
|
|
||||||
|
mkA : (cher : Str) -> A ; -- banal, heureux, italien, jeune, amer, carré, joli
|
||||||
|
mkA : (sec,seche : Str) -> A ;
|
||||||
|
mkA : (banal,banale,banaux,banalement : Str) -> A ;
|
||||||
|
mkA : (bon : A) -> (meilleur : A) -> A
|
||||||
|
prefixA : A -> A ;
|
||||||
|
|
||||||
|
mkV : (finir : Str) -> V ; -- aimer, céder, placer, manger, payer, finir
|
||||||
|
mkV : (jeter,jette,jettera : Str) -> V ;
|
||||||
|
mkV : V2 -> V
|
||||||
|
etreV : V -> V ;
|
||||||
|
reflV : V -> V ;
|
||||||
|
```
|
||||||
|
|||||||
@@ -76,11 +76,11 @@ oper
|
|||||||
-- The gender heuristic is less reliable: it treats as feminine all
|
-- The gender heuristic is less reliable: it treats as feminine all
|
||||||
-- nouns ending with "e" and "ion", all others as masculine.
|
-- nouns ending with "e" and "ion", all others as masculine.
|
||||||
|
|
||||||
mkN : Str -> N ;
|
mkN : (cheval : Str) -> N ;
|
||||||
|
|
||||||
-- Adding gender information widens the scope of the regular pattern.
|
-- Adding gender information widens the scope of the regular pattern.
|
||||||
|
|
||||||
mkN : Str -> Gender -> N ;
|
mkN : (foie : Str) -> Gender -> N ;
|
||||||
|
|
||||||
-- In the worst case, both singular and plural forms and the gender are needed.
|
-- In the worst case, both singular and plural forms and the gender are needed.
|
||||||
|
|
||||||
@@ -96,7 +96,6 @@ oper
|
|||||||
mkN : N -> Str -> N
|
mkN : N -> Str -> N
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
compN : N -> Str -> N ;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -147,7 +146,7 @@ oper
|
|||||||
-- "heureux-heureuse-heureux", "italien-italienne", "jeune-jeune",
|
-- "heureux-heureuse-heureux", "italien-italienne", "jeune-jeune",
|
||||||
-- "amer-amère", "carré- - -carrément", "joli- - -joliment".
|
-- "amer-amère", "carré- - -carrément", "joli- - -joliment".
|
||||||
|
|
||||||
mkA : Str -> A ;
|
mkA : (cher : Str) -> A ;
|
||||||
|
|
||||||
-- Often just the feminine singular is deviant.
|
-- Often just the feminine singular is deviant.
|
||||||
|
|
||||||
|
|||||||
@@ -68,10 +68,7 @@ oper
|
|||||||
|
|
||||||
--2 Nouns
|
--2 Nouns
|
||||||
|
|
||||||
-- Worst case: two forms (singular + plural),
|
mkN : overload {
|
||||||
-- and the gender.
|
|
||||||
|
|
||||||
mkN : (_,_ : Str) -> Gender -> N ; -- bastón, bastones, masculine
|
|
||||||
|
|
||||||
-- The regular function takes the singular form and the gender,
|
-- The regular function takes the singular form and the gender,
|
||||||
-- and computes the plural and the gender by a heuristic.
|
-- and computes the plural and the gender by a heuristic.
|
||||||
@@ -81,12 +78,17 @@ oper
|
|||||||
-- those ending with "z" have "ces" in plural; all other nouns
|
-- those ending with "z" have "ces" in plural; all other nouns
|
||||||
-- have "es" as plural ending. The accent is not dealt with.
|
-- have "es" as plural ending. The accent is not dealt with.
|
||||||
|
|
||||||
regN : Str -> N ;
|
mkN : (luz : Str) -> N ;
|
||||||
|
|
||||||
-- To force a different gender, use one of the following functions.
|
-- A different gender can be forced.
|
||||||
|
|
||||||
|
mkN : Str -> Gender -> N ;
|
||||||
|
|
||||||
|
-- The worst case has two forms (singular + plural) and the gender.
|
||||||
|
|
||||||
|
mkN : (baston,bastones : Str) -> Gender -> N
|
||||||
|
} ;
|
||||||
|
|
||||||
mascN : N -> N ;
|
|
||||||
femN : N -> N ;
|
|
||||||
|
|
||||||
--3 Compound nouns
|
--3 Compound nouns
|
||||||
--
|
--
|
||||||
@@ -126,35 +128,42 @@ oper
|
|||||||
--3 Proper names and noun phrases
|
--3 Proper names and noun phrases
|
||||||
--
|
--
|
||||||
-- Proper names need a string and a gender.
|
-- Proper names need a string and a gender.
|
||||||
|
-- The default gender is feminine for names ending with "a", otherwise masculine.
|
||||||
|
|
||||||
mkPN : Str -> Gender -> PN ; -- Juan
|
mkPN : overload {
|
||||||
regPN : Str -> PN ; -- feminine for "-a", otherwise masculine
|
mkPN : (Anna : Str) -> PN ;
|
||||||
|
mkPN : (Pilar : Str) -> Gender -> PN
|
||||||
|
} ;
|
||||||
|
|
||||||
|
|
||||||
-- To form a noun phrase that can also be plural,
|
|
||||||
-- you can use the worst-case function.
|
|
||||||
|
|
||||||
mkNP : Str -> Gender -> Number -> NP ;
|
|
||||||
|
|
||||||
--2 Adjectives
|
--2 Adjectives
|
||||||
|
|
||||||
-- Non-comparison one-place adjectives need five forms in the worst
|
mkA : overload {
|
||||||
|
|
||||||
|
-- For regular adjectives, all forms are derived from the
|
||||||
|
-- masculine singular. The types of adjectives that are recognized are
|
||||||
|
-- "alto", "fuerte", "util". Comparison is formed by "mas".
|
||||||
|
|
||||||
|
mkA : (util : Str) -> A ;
|
||||||
|
|
||||||
|
-- One-place adjectives compared with "mas" need five forms in the worst
|
||||||
-- case (masc and fem singular, masc plural, adverbial).
|
-- case (masc and fem singular, masc plural, adverbial).
|
||||||
|
|
||||||
mkA : (solo,sola,solos,solas, solamiento : Str) -> A ;
|
mkA : (solo,sola,solos,solas,solamiento : Str) -> A ;
|
||||||
|
|
||||||
-- For regular adjectives, all other forms are derived from the
|
-- In the worst case, two separate adjectives are given:
|
||||||
-- masculine singular. The types of adjectives that are recognized are
|
-- the positive ("bueno"), and the comparative ("mejor").
|
||||||
-- "alto", "fuerte", "util".
|
|
||||||
|
|
||||||
regA : Str -> A ;
|
mkA : (bueno : A) -> (mejor : A) -> A
|
||||||
|
} ;
|
||||||
|
|
||||||
-- These functions create postfix adjectives. To switch
|
-- The functions above create postfix adjectives. To switch
|
||||||
-- them to prefix ones (i.e. ones placed before the noun in
|
-- them to prefix ones (i.e. ones placed before the noun in
|
||||||
-- modification, as in "bueno vino"), the following function is
|
-- modification, as in "bueno vino"), the following function is
|
||||||
-- provided.
|
-- provided.
|
||||||
|
|
||||||
prefA : A -> A ;
|
prefixA : A -> A ;
|
||||||
|
|
||||||
|
|
||||||
--3 Two-place adjectives
|
--3 Two-place adjectives
|
||||||
--
|
--
|
||||||
@@ -162,22 +171,6 @@ oper
|
|||||||
|
|
||||||
mkA2 : A -> Prep -> A2 ;
|
mkA2 : A -> Prep -> A2 ;
|
||||||
|
|
||||||
--3 Comparison adjectives
|
|
||||||
|
|
||||||
-- Comparison adjectives are in the worst case put up from two
|
|
||||||
-- adjectives: the positive ("bueno"), and the comparative ("mejor").
|
|
||||||
|
|
||||||
mkADeg : A -> A -> A ;
|
|
||||||
|
|
||||||
-- If comparison is formed by "mas", as usual in Spanish,
|
|
||||||
-- the following pattern is used:
|
|
||||||
|
|
||||||
compADeg : A -> A ;
|
|
||||||
|
|
||||||
-- The regular pattern is the same as $regA$ for plain adjectives,
|
|
||||||
-- with comparison by "mas".
|
|
||||||
|
|
||||||
regADeg : Str -> A ;
|
|
||||||
|
|
||||||
|
|
||||||
--2 Adverbs
|
--2 Adverbs
|
||||||
@@ -197,19 +190,28 @@ oper
|
|||||||
|
|
||||||
|
|
||||||
--2 Verbs
|
--2 Verbs
|
||||||
--
|
|
||||||
|
mkV : overload {
|
||||||
|
|
||||||
-- Regular verbs are ones inflected like "cortar", "deber", or "vivir".
|
-- Regular verbs are ones inflected like "cortar", "deber", or "vivir".
|
||||||
-- The regular verb function is the first conjugation ("ar") recognizes
|
-- The regular verb function is the first conjugation ("ar") recognizes
|
||||||
-- the variations corresponding to the patterns
|
-- the variations corresponding to the patterns
|
||||||
-- "actuar, cazar, guiar, pagar, sacar". The module $BeschSpa$ gives
|
-- "actuar, cazar, guiar, pagar, sacar". The module $BeschSpa$ gives
|
||||||
-- the complete set of "Bescherelle" conjugations.
|
-- the complete set of "Bescherelle" conjugations.
|
||||||
|
|
||||||
regV : Str -> V ;
|
mkV : (pagar : Str) -> V ;
|
||||||
|
|
||||||
-- The module $BeschSpa$ gives all the patterns of the "Bescherelle"
|
-- Verbs with vowel alternatition in the stem - easiest to give with
|
||||||
|
-- two forms, e.g. "mostrar"/"muestro".
|
||||||
|
|
||||||
|
mkV : (mostrar,muestro : Str) -> V ;
|
||||||
|
|
||||||
|
-- Most irreguler verbs are found in $IrregSpa$. If this is not enough,
|
||||||
|
-- the module $BeschSpa$ gives all the patterns of the "Bescherelle"
|
||||||
-- book. To use them in the category $V$, wrap them with the function
|
-- book. To use them in the category $V$, wrap them with the function
|
||||||
|
|
||||||
verboV : Verbum -> V ;
|
mkV : Verbum -> V
|
||||||
|
} ;
|
||||||
|
|
||||||
-- To form reflexive verbs:
|
-- To form reflexive verbs:
|
||||||
|
|
||||||
@@ -220,20 +222,19 @@ oper
|
|||||||
|
|
||||||
special_ppV : V -> Str -> V ;
|
special_ppV : V -> Str -> V ;
|
||||||
|
|
||||||
-- Verbs with vowel alternatition in the stem - easiest to give with
|
|
||||||
-- two forms, e.g. "mostrar"/"muestro".
|
|
||||||
|
|
||||||
regAltV : (mostrar,muestro : Str) -> 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).
|
||||||
|
|
||||||
mkV2 : V -> Prep -> V2 ;
|
mkV2 : overload {
|
||||||
|
mkV2 : Str -> V2 ;
|
||||||
|
mkV2 : V -> V2 ;
|
||||||
|
mkV2 : V -> Prep -> V2
|
||||||
|
} ;
|
||||||
|
|
||||||
dirV2 : V -> V2 ;
|
|
||||||
|
|
||||||
-- You can reuse a $V2$ verb in $V$.
|
-- You can reuse a $V2$ verb in $V$.
|
||||||
|
|
||||||
@@ -299,7 +300,7 @@ oper
|
|||||||
mkPrep p = {s = p ; c = Acc ; isDir = False} ;
|
mkPrep p = {s = p ; c = Acc ; isDir = False} ;
|
||||||
|
|
||||||
|
|
||||||
mkN x y g = mkNounIrreg x y g ** {lock_N = <>} ;
|
mk2N x y g = mkNounIrreg x y g ** {lock_N = <>} ;
|
||||||
regN x = mkNomReg x ** {lock_N = <>} ;
|
regN x = mkNomReg x ** {lock_N = <>} ;
|
||||||
compN x y = {s = \\n => x.s ! n ++ y ; g = x.g ; lock_N = <>} ;
|
compN x y = {s = \\n => x.s ! n ++ y ; g = x.g ; lock_N = <>} ;
|
||||||
femN x = {s = x.s ; g = feminine ; lock_N = <>} ;
|
femN x = {s = x.s ; g = feminine ; lock_N = <>} ;
|
||||||
@@ -310,17 +311,17 @@ oper
|
|||||||
aN2 n = mkN2 n dative ;
|
aN2 n = mkN2 n dative ;
|
||||||
mkN3 = \n,p,q -> n ** {lock_N3 = <> ; c2 = p ; c3 = q} ;
|
mkN3 = \n,p,q -> n ** {lock_N3 = <> ; c2 = p ; c3 = q} ;
|
||||||
|
|
||||||
mkPN x g = {s = x ; g = g} ** {lock_PN = <>} ;
|
mk2PN x g = {s = x ; g = g} ** {lock_PN = <>} ;
|
||||||
regPN x = mkPN x g where {
|
regPN x = mk2PN x g where {
|
||||||
g = case last x of {
|
g = case last x of {
|
||||||
"a" => feminine ;
|
"a" => feminine ;
|
||||||
_ => masculine
|
_ => masculine
|
||||||
}
|
}
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
mkNP x g n = {s = (pn2np (mkPN x g)).s; a = agrP3 g n ; hasClit = False} ** {lock_NP = <>} ;
|
mkNP x g n = {s = (pn2np (mk2PN x g)).s; a = agrP3 g n ; hasClit = False} ** {lock_NP = <>} ;
|
||||||
|
|
||||||
mkA a b c d e =
|
mk5A a b c d e =
|
||||||
compADeg {s = \\_ => (mkAdj a b c d e).s ; isPre = False ; lock_A = <>} ;
|
compADeg {s = \\_ => (mkAdj a b c d e).s ; isPre = False ; lock_A = <>} ;
|
||||||
regA a = compADeg {s = \\_ => (mkAdjReg a).s ; isPre = False ; lock_A = <>} ;
|
regA a = compADeg {s = \\_ => (mkAdjReg a).s ; isPre = False ; lock_A = <>} ;
|
||||||
prefA a = {s = a.s ; isPre = True ; lock_A = <>} ;
|
prefA a = {s = a.s ; isPre = True ; lock_A = <>} ;
|
||||||
@@ -375,8 +376,8 @@ oper
|
|||||||
|
|
||||||
regAltV x y = verboV (regAlternV x y) ;
|
regAltV x y = verboV (regAlternV x y) ;
|
||||||
|
|
||||||
mkV2 v p = {s = v.s ; vtyp = v.vtyp ; c2 = p ; lock_V2 = <>} ;
|
mk2V2 v p = {s = v.s ; vtyp = v.vtyp ; c2 = p ; lock_V2 = <>} ;
|
||||||
dirV2 v = mkV2 v accusative ;
|
dirV2 v = mk2V2 v accusative ;
|
||||||
v2V v = v ** {lock_V = <>} ;
|
v2V v = v ** {lock_V = <>} ;
|
||||||
|
|
||||||
mkV3 v p q = {s = v.s ; vtyp = v.vtyp ;
|
mkV3 v p q = {s = v.s ; vtyp = v.vtyp ;
|
||||||
@@ -391,19 +392,77 @@ oper
|
|||||||
|
|
||||||
mkV0 v = v ** {lock_V0 = <>} ;
|
mkV0 v = v ** {lock_V0 = <>} ;
|
||||||
mkVS v = v ** {m = \\_ => Indic ; lock_VS = <>} ; ---- more moods
|
mkVS v = v ** {m = \\_ => Indic ; lock_VS = <>} ; ---- more moods
|
||||||
mkV2S v p = mkV2 v p ** {mn,mp = Indic ; lock_V2S = <>} ;
|
mkV2S v p = mk2V2 v p ** {mn,mp = Indic ; lock_V2S = <>} ;
|
||||||
mkVV v = v ** {c2 = complAcc ; lock_VV = <>} ;
|
mkVV v = v ** {c2 = complAcc ; lock_VV = <>} ;
|
||||||
deVV v = v ** {c2 = complGen ; lock_VV = <>} ;
|
deVV v = v ** {c2 = complGen ; lock_VV = <>} ;
|
||||||
aVV v = v ** {c2 = complDat ; lock_VV = <>} ;
|
aVV v = v ** {c2 = complDat ; lock_VV = <>} ;
|
||||||
mkV2V v p t = mkV2 v p ** {c3 = t.p1 ; s3 = p.p2 ; lock_V2V = <>} ;
|
mkV2V v p t = mk2V2 v p ** {c3 = t.p1 ; s3 = p.p2 ; lock_V2V = <>} ;
|
||||||
mkVA v = v ** {lock_VA = <>} ;
|
mkVA v = v ** {lock_VA = <>} ;
|
||||||
mkV2A v p q = mkV3 v p q ** {lock_V2A = <>} ;
|
mkV2A v p q = mkV3 v p q ** {lock_V2A = <>} ;
|
||||||
mkVQ v = v ** {lock_VQ = <>} ;
|
mkVQ v = v ** {lock_VQ = <>} ;
|
||||||
mkV2Q v p = mkV2 v p ** {lock_V2Q = <>} ;
|
mkV2Q v p = mk2V2 v p ** {lock_V2Q = <>} ;
|
||||||
|
|
||||||
mkAS v = v ** {lock_AS = <>} ; ---- more moods
|
mkAS v = v ** {lock_AS = <>} ; ---- more moods
|
||||||
mkA2S v p = mkA2 v p ** {lock_A2S = <>} ;
|
mkA2S v p = mkA2 v p ** {lock_A2S = <>} ;
|
||||||
mkAV v p = v ** {c = p.p1 ; s2 = p.p2 ; lock_AV = <>} ;
|
mkAV v p = v ** {c = p.p1 ; s2 = p.p2 ; lock_AV = <>} ;
|
||||||
mkA2V v p q = mkA2 v p ** {s3 = q.p2 ; c3 = q.p1 ; lock_A2V = <>} ;
|
mkA2V v p q = mkA2 v p ** {s3 = q.p2 ; c3 = q.p1 ; lock_A2V = <>} ;
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
mkN = overload {
|
||||||
|
mkN : (luz : Str) -> N = regN ;
|
||||||
|
mkN : Str -> Gender -> N = \s,g -> {s = (regN s).s ; g = g ; lock_N = <>};
|
||||||
|
mkN : (baston,bastones : Str) -> Gender -> N = mk2N
|
||||||
|
} ;
|
||||||
|
regN : Str -> N ;
|
||||||
|
mk2N : (baston,bastones : Str) -> Gender -> N ;
|
||||||
|
mascN : N -> N ;
|
||||||
|
femN : N -> N ;
|
||||||
|
|
||||||
|
|
||||||
|
mkPN = overload {
|
||||||
|
mkPN : (Anna : Str) -> PN = regPN ;
|
||||||
|
mkPN : (Pilar : Str) -> Gender -> PN = mk2PN
|
||||||
|
} ;
|
||||||
|
mk2PN : Str -> Gender -> PN ; -- Juan
|
||||||
|
regPN : Str -> PN ; -- feminine for "-a", otherwise masculine
|
||||||
|
|
||||||
|
-- To form a noun phrase that can also be plural,
|
||||||
|
-- you can use the worst-case function.
|
||||||
|
|
||||||
|
mkNP : Str -> Gender -> Number -> NP ;
|
||||||
|
|
||||||
|
mkA = overload {
|
||||||
|
mkA : (util : Str) -> A = regA ;
|
||||||
|
mkA : (solo,sola,solos,solas,solamiento : Str) -> A = mk5A ;
|
||||||
|
mkA : (bueno : A) -> (mejor : A) -> A = mkADeg ;
|
||||||
|
} ;
|
||||||
|
|
||||||
|
mk5A : (solo,sola,solos,solas, solamiento : Str) -> A ;
|
||||||
|
regA : Str -> A ;
|
||||||
|
mkADeg : A -> A -> A ;
|
||||||
|
compADeg : A -> A ;
|
||||||
|
regADeg : Str -> A ;
|
||||||
|
prefA : A -> A ;
|
||||||
|
prefixA = prefA ;
|
||||||
|
|
||||||
|
mkV = overload {
|
||||||
|
mkV : (pagar : Str) -> V = regV ;
|
||||||
|
mkV : (mostrar,muestro : Str) -> V = regAltV ;
|
||||||
|
mkV : Verbum -> V = verboV
|
||||||
|
} ;
|
||||||
|
regV : Str -> V ;
|
||||||
|
regAltV : (mostrar,muestro : Str) -> V ;
|
||||||
|
verboV : Verbum -> V ;
|
||||||
|
|
||||||
|
mkV2 = overload {
|
||||||
|
mkV2 : Str -> V2 = \s -> dirV2 (regV s) ;
|
||||||
|
mkV2 : V -> V2 = dirV2 ;
|
||||||
|
mkV2 : V -> Prep -> V2 = mk2V2
|
||||||
|
} ;
|
||||||
|
mk2V2 : V -> Prep -> V2 ;
|
||||||
|
dirV2 : V -> V2 ;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
} ;
|
} ;
|
||||||
|
|||||||
Reference in New Issue
Block a user