1
0
forked from GitHub/gf-core

Maltese RG: update ParadigmsMlt to generate a nice table in the RGL Synopsis

This commit is contained in:
john.j.camilleri
2013-07-16 13:16:50 +00:00
parent 656f934945
commit 8cc37af415
7 changed files with 602 additions and 508 deletions

View File

@@ -335,10 +335,11 @@ readFileC cod file = do
system $ "iconv -f ISO-8859-1 -t UTF-8 " ++ file ++ " >" ++ tmp system $ "iconv -f ISO-8859-1 -t UTF-8 " ++ file ++ " >" ++ tmp
readFile tmp readFile tmp
-- 'intelligently' determine the coding of a file
coding file = case language file of coding file = case language file of
"Pol" -> "utf8" "Pol" -> "utf8"
"Rus" -> "utf8" "Rus" -> "utf8"
"Mlt" -> "utf8"
_ -> "latin1" _ -> "latin1"
language = reverse . take 3 . drop 3 . reverse language = reverse . take 3 . drop 3 . reverse

View File

@@ -345,12 +345,12 @@ concrete DictMlt of DictMltAbs = CatMlt ** open ParadigmsMlt in {
tkaghweg_KGHWG_2_7009_V = mkV_II "tkagħweġ" (mkRoot "k-għ-w-ġ") ; tkaghweg_KGHWG_2_7009_V = mkV_II "tkagħweġ" (mkRoot "k-għ-w-ġ") ;
kolja_KLJJ_1_7010_V = mkV "kolja" (mkRoot "k-l-j-j") ; kolja_KLJJ_1_7010_V = mkV "kolja" (mkRoot "k-l-j-j") ;
kampa_KMPJ_1_7011_V = mkV "kampa" (mkRoot "k-m-p-j") ; kampa_KMPJ_1_7011_V = mkV "kampa" (mkRoot "k-m-p-j") ;
kompla_KMPLJ_1_7012_V = mkV quadWeak form1 (mkRoot "k-m-pl-j") (mkPattern "o" "a") kompla_KMPLJ_1_7012_V = mkV quadWeak form1 (mkRoot "k-m-pl-j") (mkVowels "o" "a")
"komplejt" "komplejt" "kompla" "kompliet" "komplejna" "komplejtu" "komplew" "komplejt" "komplejt" "kompla" "kompliet" "komplejna" "komplejtu" "komplew"
"nkompli" "tkompli" "jkompli" "tkompli" "nkomplu" "tkomplu" "jkomplu" "nkompli" "tkompli" "jkompli" "tkompli" "nkomplu" "tkomplu" "jkomplu"
"kompli" "komplu" "kompli" "komplu"
; ;
tkompla_KMPLJ_2_7013_V = mkV quadWeak form2 (mkRoot "k-m-pl-j") (mkPattern "o" "a") tkompla_KMPLJ_2_7013_V = mkV quadWeak form2 (mkRoot "k-m-pl-j") (mkVowels "o" "a")
"tkomplejt" "tkomplejt" "tkompla" "tkompliet" "tkomplejna" "tkomplejtu" "tkomplew" "tkomplejt" "tkomplejt" "tkompla" "tkompliet" "tkomplejna" "tkomplejtu" "tkomplew"
"nitkompla" "titkompla" "jitkompla" "titkompla" "nitkomplu" "titkomplu" "jitkomplu" "nitkompla" "titkompla" "jitkompla" "titkompla" "nitkomplu" "titkomplu" "jitkomplu"
"tkompla" "tkomplu" "tkompla" "tkomplu"
@@ -428,12 +428,12 @@ concrete DictMlt of DictMltAbs = CatMlt ** open ParadigmsMlt in {
mander_MNDR_1_7085_V = mkV "mander" (mkRoot "m-n-d-r") ; mander_MNDR_1_7085_V = mkV "mander" (mkRoot "m-n-d-r") ;
tmandar_MNDR_2_7086_V = mkV_II "tmandar" (mkRoot "m-n-d-r") ; tmandar_MNDR_2_7086_V = mkV_II "tmandar" (mkRoot "m-n-d-r") ;
menghel_MNGHL_1_7087_V = mkV "mengħel" (mkRoot "m-n-għ-l") ; menghel_MNGHL_1_7087_V = mkV "mengħel" (mkRoot "m-n-għ-l") ;
mantna_MNTNJ_1_7088_V = mkV quadWeak form1 (mkRoot "m-n-tn-j") (mkPattern "a" "a") mantna_MNTNJ_1_7088_V = mkV quadWeak form1 (mkRoot "m-n-tn-j") (mkVowels "a" "a")
"mantnejt" "mantnejt" "mantna" "mantniet" "mantnejna" "mantnejtu" "mantnew" "mantnejt" "mantnejt" "mantna" "mantniet" "mantnejna" "mantnejtu" "mantnew"
"nmantna" "tmantna" "jmantna" "tmantna" "nmantnu" "tmantnu" "jmantnu" "nmantna" "tmantna" "jmantna" "tmantna" "nmantnu" "tmantnu" "jmantnu"
"mantna" "mantnu" "mantna" "mantnu"
; ;
tmantna_MNTNJ_2_7089_V = mkV quadWeak form2 (mkRoot "m-n-tn-j") (mkPattern "a" "a") tmantna_MNTNJ_2_7089_V = mkV quadWeak form2 (mkRoot "m-n-tn-j") (mkVowels "a" "a")
"tmantnejt" "tmantnejt" "tmantna" "tmantniet" "tmantnejna" "tmantnejtu" "tmantnew" "tmantnejt" "tmantnejt" "tmantna" "tmantniet" "tmantnejna" "tmantnejtu" "tmantnew"
"nitmantna" "titmantna" "jitmantna" "titmantna" "nitmantnu" "titmantnu" "jitmantnu" "nitmantna" "titmantna" "jitmantna" "titmantna" "nitmantnu" "titmantnu" "jitmantnu"
"tmantna" "tmantnu" "tmantna" "tmantnu"
@@ -784,12 +784,12 @@ concrete DictMlt of DictMltAbs = CatMlt ** open ParadigmsMlt in {
balla'_BLGH_2_7436_V = mkV_II "balla'" (mkRoot "b-l-għ") ; balla'_BLGH_2_7436_V = mkV_II "balla'" (mkRoot "b-l-għ") ;
tballa'_BLGH_5_7437_V = mkV_V "tballa'" (mkRoot "b-l-għ") ; tballa'_BLGH_5_7437_V = mkV_V "tballa'" (mkRoot "b-l-għ") ;
nbela'_BLGH_7_7438_V = mkV_VII "bela'" "nbela'" (mkRoot "b-l-għ") ; nbela'_BLGH_7_7438_V = mkV_VII "bela'" "nbela'" (mkRoot "b-l-għ") ;
blehhen_BLHN_1_7439_V = mkV strong form1 (mkRoot "bl-ħ-n") (mkPattern "e" "e") blehhen_BLHN_1_7439_V = mkV strong form1 (mkRoot "bl-ħ-n") (mkVowels "e" "e")
"bleħħint" "bleħħint" "bleħħen" "bleħħnet" "bleħħinna" "bleħħintu" "bleħħnu" "bleħħint" "bleħħint" "bleħħen" "bleħħnet" "bleħħinna" "bleħħintu" "bleħħnu"
"nbleħħen" "tbleħħen" "jibleħħen" "tbleħħen" "nbleħħnu" "tbleħħnu" "jibleħħnu" "nbleħħen" "tbleħħen" "jibleħħen" "tbleħħen" "nbleħħnu" "tbleħħnu" "jibleħħnu"
"bleħħen" "bleħħnu" "bleħħen" "bleħħnu"
; ;
tblehhen_BLHN_2_7440_V = mkV strong form2 (mkRoot "bl-ħ-n") (mkPattern "e" "e") tblehhen_BLHN_2_7440_V = mkV strong form2 (mkRoot "bl-ħ-n") (mkVowels "e" "e")
"tbleħħint" "tbleħħint" "tbleħħen" "tbleħħnet" "tbleħħinna" "tbleħħintu" "tbleħħnu" "tbleħħint" "tbleħħint" "tbleħħen" "tbleħħnet" "tbleħħinna" "tbleħħintu" "tbleħħnu"
"nitbleħħen" "titbleħħen" "jitbleħħen" "titbleħħen" "nitbleħħnu" "titbleħħnu" "jitbleħħnu" "nitbleħħen" "titbleħħen" "jitbleħħen" "titbleħħen" "nitbleħħnu" "titbleħħnu" "jitbleħħnu"
"tbleħħen" "tbleħħnu" "tbleħħen" "tbleħħnu"
@@ -846,7 +846,7 @@ concrete DictMlt of DictMltAbs = CatMlt ** open ParadigmsMlt in {
tberrek_BRK_5_7490_V = mkV_V "tberrek" (mkRoot "b-r-k") ; tberrek_BRK_5_7490_V = mkV_V "tberrek" (mkRoot "b-r-k") ;
bierek_BRK_3_7491_V = mkV_III "bierek" (mkRoot "b-r-k") ; bierek_BRK_3_7491_V = mkV_III "bierek" (mkRoot "b-r-k") ;
tbierek_BRK_6_7492_V = mkV_VI "tbierek" (mkRoot "b-r-k") ; tbierek_BRK_6_7492_V = mkV_VI "tbierek" (mkRoot "b-r-k") ;
tbrekken_BRKN_5_7493_V = mkV strong form5 (mkRoot "br-k-n") (mkPattern "e" "e") tbrekken_BRKN_5_7493_V = mkV strong form5 (mkRoot "br-k-n") (mkVowels "e" "e")
"tbrekkint" "tbrekkint" "tbrekken" "tbrekknet" "tbrekkinna" "tbrekkintu" "tbrekknu" "tbrekkint" "tbrekkint" "tbrekken" "tbrekknet" "tbrekkinna" "tbrekkintu" "tbrekknu"
"nitbrekken" "titbrekken" "jitbrekken" "titbrekken" "nitbrekknu" "titbrekknu" "jitbrekknu" "nitbrekken" "titbrekken" "jitbrekken" "titbrekken" "nitbrekknu" "titbrekknu" "jitbrekknu"
"tbrekken" "tbrekknu" "tbrekken" "tbrekknu"
@@ -1484,7 +1484,7 @@ concrete DictMlt of DictMltAbs = CatMlt ** open ParadigmsMlt in {
gezz_GZZ_1_8120_V = mkV "ġeżż" (mkRoot "ġ-ż-ż") ; gezz_GZZ_1_8120_V = mkV "ġeżż" (mkRoot "ġ-ż-ż") ;
gezzez_GZZ_2_8121_V = mkV_II "ġeżżeż" (mkRoot "ġ-ż-ż") ; gezzez_GZZ_2_8121_V = mkV_II "ġeżżeż" (mkRoot "ġ-ż-ż") ;
ngezz_GZZ_7_8122_V = mkV_VII "ġeżż" "nġeżż" (mkRoot "ġ-ż-ż") ; ngezz_GZZ_7_8122_V = mkV_VII "ġeżż" "nġeżż" (mkRoot "ġ-ż-ż") ;
gie_GJ'_1_8123_V = presPartV "ġej" (pastPartV "miġjub" (irregularV form1 (mkRoot "ġ-j-'") (mkPattern "ie" []) gie_GJ'_1_8123_V = presPartV "ġej" (pastPartV "miġjub" (irregularV form1 (mkRoot "ġ-j-'") (mkVowels "ie" [])
"ġejt" "ġejt" "ġie" "ġiet" "ġejna" "ġejtu" "ġew" "ġejt" "ġejt" "ġie" "ġiet" "ġejna" "ġejtu" "ġew"
"niġi" "tiġi" "jiġi" "tiġi" "niġu" "tiġu" "jiġu" "niġi" "tiġi" "jiġi" "tiġi" "niġu" "tiġu" "jiġu"
"ejja" "ejjew" "ejja" "ejjew"
@@ -2035,7 +2035,7 @@ concrete DictMlt of DictMltAbs = CatMlt ** open ParadigmsMlt in {
tkejjef_KJF_5_8669_V = mkV_V "tkejjef" (mkRoot "k-j-f") ; tkejjef_KJF_5_8669_V = mkV_V "tkejjef" (mkRoot "k-j-f") ;
kejjel_KJL_2_8670_V = mkV_II "kejjel" (mkRoot "k-j-l") ; kejjel_KJL_2_8670_V = mkV_II "kejjel" (mkRoot "k-j-l") ;
tkejjel_KJL_5_8671_V = mkV_V "tkejjel" (mkRoot "k-j-l") ; tkejjel_KJL_5_8671_V = mkV_V "tkejjel" (mkRoot "k-j-l") ;
kiel_KJL_1_8672_V = pastPartV "mikul" (irregularV form1 (mkRoot "k-j-l") (mkPattern "ie" []) kiel_KJL_1_8672_V = pastPartV "mikul" (irregularV form1 (mkRoot "k-j-l") (mkVowels "ie" [])
"kilt" "kilt" "kiel" "kielet" "kilna" "kiltu" "kielu" "kilt" "kilt" "kiel" "kielet" "kilna" "kiltu" "kielu"
"niekol" "tiekol" "jiekol" "tiekol" "nieklu" "tieklu" "jieklu" "niekol" "tiekol" "jiekol" "tiekol" "nieklu" "tieklu" "jieklu"
("kul"|"iekol") ("kulu"|"ieklu") ("kul"|"iekol") ("kulu"|"ieklu")
@@ -2062,7 +2062,7 @@ concrete DictMlt of DictMltAbs = CatMlt ** open ParadigmsMlt in {
kewa_KWJ_1_8692_V = mkV "kewa" (mkRoot "k-w-j") ; kewa_KWJ_1_8692_V = mkV "kewa" (mkRoot "k-w-j") ;
tkiewa_KWJ_6_8693_V = mkV_VI "tkiewa" (mkRoot "k-w-j") ; tkiewa_KWJ_6_8693_V = mkV_VI "tkiewa" (mkRoot "k-w-j") ;
nkewa_KWJ_7_8694_V = mkV_VII "kewa" "nkewa" (mkRoot "k-w-j") ; nkewa_KWJ_7_8694_V = mkV_VII "kewa" "nkewa" (mkRoot "k-w-j") ;
kien_KWN_1_8695_V = irregularV form1 (mkRoot "k-w-n") (mkPattern "ie" []) kien_KWN_1_8695_V = irregularV form1 (mkRoot "k-w-n") (mkVowels "ie" [])
"kont" "kont" "kien" "kienet" "konna" "kontu" "kienu" "kont" "kont" "kien" "kienet" "konna" "kontu" "kienu"
"nkun" "tkun" "jkun" "tkun" "nkunu" "tkunu" "jkunu" "nkun" "tkun" "jkun" "tkun" "nkunu" "tkunu" "jkunu"
"kun" "kunu" "kun" "kunu"
@@ -2289,7 +2289,7 @@ concrete DictMlt of DictMltAbs = CatMlt ** open ParadigmsMlt in {
tmiera_MRJ_6_8915_V = mkV_VI "tmiera" (mkRoot "m-r-j") ; tmiera_MRJ_6_8915_V = mkV_VI "tmiera" (mkRoot "m-r-j") ;
mewweg_MWG_2_8916_V = mkV_II "mewweġ" (mkRoot "m-w-ġ") ; mewweg_MWG_2_8916_V = mkV_II "mewweġ" (mkRoot "m-w-ġ") ;
tmewweg_MWG_5_8917_V = mkV_V "tmewweġ" (mkRoot "m-w-ġ") ; tmewweg_MWG_5_8917_V = mkV_V "tmewweġ" (mkRoot "m-w-ġ") ;
mar_MWR_1_8918_V = presPartV "sejjer" (irregularV form1 (mkRoot "m-w-r") (mkPattern "a" []) mar_MWR_1_8918_V = presPartV "sejjer" (irregularV form1 (mkRoot "m-w-r") (mkVowels "a" [])
"mort" "mort" "mar" "marret" "morna" "mortu" "marru" "mort" "mort" "mar" "marret" "morna" "mortu" "marru"
"mmur" "tmur" "jmur" "tmur" "mmorru" "tmorru" "jmorru" "mmur" "tmur" "jmur" "tmur" "mmorru" "tmorru" "jmorru"
"mur" "morru" "mur" "morru"
@@ -2730,7 +2730,7 @@ concrete DictMlt of DictMltAbs = CatMlt ** open ParadigmsMlt in {
nqara_QRJ_7_9354_V = mkV_VII "qara" "nqara" (mkRoot "q-r-j") ; nqara_QRJ_7_9354_V = mkV_VII "qara" "nqara" (mkRoot "q-r-j") ;
qawwa_QWJ_2_9355_V = mkV_II "qawwa" (mkRoot "q-w-j") ; qawwa_QWJ_2_9355_V = mkV_II "qawwa" (mkRoot "q-w-j") ;
tqawwa_QWJ_5_9356_V = mkV_V "tqawwa" (mkRoot "q-w-j") ; tqawwa_QWJ_5_9356_V = mkV_V "tqawwa" (mkRoot "q-w-j") ;
qal_QWL_1_9357_V = irregularV form1 (mkRoot "q-w-l") (mkPattern "a" []) qal_QWL_1_9357_V = irregularV form1 (mkRoot "q-w-l") (mkVowels "a" [])
"għedt" "għedt" "qal" "qalet" "għedna" "għedtu" "qalu" "għedt" "għedt" "qal" "qalet" "għedna" "għedtu" "qalu"
"ngħid" "tgħid" "jgħid" "tgħid" "ngħidu" "tgħidu" "jgħidu" "ngħid" "tgħid" "jgħid" "tgħid" "ngħidu" "tgħidu" "jgħidu"
"għid" "għidu" "għid" "għidu"
@@ -2890,12 +2890,12 @@ concrete DictMlt of DictMltAbs = CatMlt ** open ParadigmsMlt in {
razan_RZN_1_9510_V = mkV "rażan" (mkRoot "r-ż-n") ; razan_RZN_1_9510_V = mkV "rażan" (mkRoot "r-ż-n") ;
razzan_RZN_2_9511_V = mkV_II "rażżan" (mkRoot "r-ż-n") ; razzan_RZN_2_9511_V = mkV_II "rażżan" (mkRoot "r-ż-n") ;
trazzan_RZN_5_9512_V = mkV_V "trażżan" (mkRoot "r-ż-n") ; trazzan_RZN_5_9512_V = mkV_V "trażżan" (mkRoot "r-ż-n") ;
ra_R'J_1_9513_V = pastPartV "muri" (irregularV form1 (mkRoot "r-'-j") (mkPattern "a" []) ra_R'J_1_9513_V = pastPartV "muri" (irregularV form1 (mkRoot "r-'-j") (mkVowels "a" [])
"rajt" "rajt" "ra" "rat" "rajna" "rajtu" "raw" "rajt" "rajt" "ra" "rat" "rajna" "rajtu" "raw"
"nara" "tara" "jara" "tara" "naraw" "taraw" "jaraw" "nara" "tara" "jara" "tara" "naraw" "taraw" "jaraw"
"ara" "araw" "ara" "araw"
) ; ) ;
ntwera_R'J_7_9514_V = irregularV form7 (mkRoot "r-'-j") (mkPattern "e" "e") ntwera_R'J_7_9514_V = irregularV form7 (mkRoot "r-'-j") (mkVowels "e" "e")
"ntwerejt" "ntwerejt" "ntwera" "ntweriet" "ntwerejna" "ntwerejtu" "ntwerew" "ntwerejt" "ntwerejt" "ntwera" "ntweriet" "ntwerejna" "ntwerejtu" "ntwerew"
"nintwera" "tintwera" "jintwera" "tintwera" "nintwerew" "tintwerew" "jintwerew" "nintwera" "tintwera" "jintwera" "tintwera" "nintwerew" "tintwerew" "jintwerew"
"ntwera" "ntwerew" "ntwera" "ntwerew"
@@ -3293,17 +3293,17 @@ concrete DictMlt of DictMltAbs = CatMlt ** open ParadigmsMlt in {
ntelaq_TLQ_7_9906_V = mkV_VII "telaq" "ntelaq" (mkRoot "t-l-q") ; ntelaq_TLQ_7_9906_V = mkV_VII "telaq" "ntelaq" (mkRoot "t-l-q") ;
tellet_TLT_2_9907_V = mkV_II "tellet" (mkRoot "t-l-t") ; tellet_TLT_2_9907_V = mkV_II "tellet" (mkRoot "t-l-t") ;
ttellet_TLT_5_9908_V = mkV_V "ttellet" (mkRoot "t-l-t") ; ttellet_TLT_5_9908_V = mkV_V "ttellet" (mkRoot "t-l-t") ;
tamma_TM'_2_9909_V = mkV irregular form2 (mkRoot "t-m-'") (mkPattern "a" "a") tamma_TM'_2_9909_V = mkV irregular form2 (mkRoot "t-m-'") (mkVowels "a" "a")
"tammajt" "tammajt" "tamma" "tammat" "tammajna" "tammajtu" "tammaw" "tammajt" "tammajt" "tamma" "tammat" "tammajna" "tammajtu" "tammaw"
"nitamma" "titamma" "jitamma" "titamma" "nitammaw" "titammaw" "jitammaw" "nitamma" "titamma" "jitamma" "titamma" "nitammaw" "titammaw" "jitammaw"
"tamma" "tammaw" "tamma" "tammaw"
; ;
tama_TM'_3_9910_V = mkV irregular form3 (mkRoot "t-m-'") (mkPattern "a" "a") tama_TM'_3_9910_V = mkV irregular form3 (mkRoot "t-m-'") (mkVowels "a" "a")
"tamajt" "tamajt" "tama" "tamat" "tamajna" "tamajtu" "tamaw" "tamajt" "tamajt" "tama" "tamat" "tamajna" "tamajtu" "tamaw"
"nitama" "titama" "jitama" "titama" "nitamaw" "titamaw" "jitamaw" "nitama" "titama" "jitama" "titama" "nitamaw" "titamaw" "jitamaw"
"tama" "tamaw" "tama" "tamaw"
; ;
ttama_TM'_6_9911_V = mkV irregular form6 (mkRoot "t-m-'") (mkPattern "a" "a") ttama_TM'_6_9911_V = mkV irregular form6 (mkRoot "t-m-'") (mkVowels "a" "a")
"ttamajt" "ttamajt" "ttama" "ttamat" "ttamajna" "ttamajtu" "ttamaw" "ttamajt" "ttamajt" "ttama" "ttamat" "ttamajna" "ttamajtu" "ttamaw"
"nittama" "tittama" "jittama" "tittama" "nittamaw" "tittamaw" "jittamaw" "nittama" "tittama" "jittama" "tittama" "nittamaw" "tittamaw" "jittamaw"
"ttama" "ttamaw" "ttama" "ttamaw"
@@ -3458,7 +3458,7 @@ concrete DictMlt of DictMltAbs = CatMlt ** open ParadigmsMlt in {
wieled_WLD_3_10059_V = mkV_III "wieled" (mkRoot "w-l-d") ; wieled_WLD_3_10059_V = mkV_III "wieled" (mkRoot "w-l-d") ;
twelled_WLD_5_10060_V = mkV_V "twelled" (mkRoot "w-l-d") ; twelled_WLD_5_10060_V = mkV_V "twelled" (mkRoot "w-l-d") ;
twieled_WLD_6_10061_V = mkV_VI "twieled" (mkRoot "w-l-d") ; twieled_WLD_6_10061_V = mkV_VI "twieled" (mkRoot "w-l-d") ;
emmen_WMN_1_10062_V = irregularV form1 (mkRoot "w-m-n") (mkPattern "e" "e") emmen_WMN_1_10062_V = irregularV form1 (mkRoot "w-m-n") (mkVowels "e" "e")
"emmint" "emmint" "emmen" "emmnet" "emminna" "emmintu" "emmnu" "emmint" "emmint" "emmen" "emmnet" "emminna" "emmintu" "emmnu"
"nemmen" "temmen" "jemmen" "temmen" "nemmnu" "temmnu" "jemmnu" "nemmen" "temmen" "jemmen" "temmen" "nemmnu" "temmnu" "jemmnu"
"emmen" "emmnu" "emmen" "emmnu"
@@ -4167,78 +4167,78 @@ concrete DictMlt of DictMltAbs = CatMlt ** open ParadigmsMlt in {
tghazza_GHZW_5_10764_V = mkV_V "tgħażża" (mkRoot "għ-ż-w") ; tghazza_GHZW_5_10764_V = mkV_V "tgħażża" (mkRoot "għ-ż-w") ;
hassel_HSL_2_10765_V = mkV_II "ħassel" (mkRoot "ħ-s-l") ; hassel_HSL_2_10765_V = mkV_II "ħassel" (mkRoot "ħ-s-l") ;
thassel_HSL_5_10766_V = mkV_V "tħassel" (mkRoot "ħ-s-l") ; thassel_HSL_5_10766_V = mkV_V "tħassel" (mkRoot "ħ-s-l") ;
ta_GHTJ_1_10767_V = pastPartV "mogħti" (irregularV form1 (mkRoot "għ-t-j") (mkPattern "a" []) ta_GHTJ_1_10767_V = pastPartV "mogħti" (irregularV form1 (mkRoot "għ-t-j") (mkVowels "a" [])
"tajt" "tajt" "ta" "tat" "tajna" "tajtu" "taw" "tajt" "tajt" "ta" "tat" "tajna" "tajtu" "taw"
"nagħti" "tagħti" "jagħti" "tagħti" "nagħtu" "tagħtu" "jagħtu" "nagħti" "tagħti" "jagħti" "tagħti" "nagħtu" "tagħtu" "jagħtu"
"agħti" "agħtu" "agħti" "agħtu"
) ; ) ;
nghata_GHTJ_7_10768_V = mkV_VII "għata" "ngħata" (mkRoot "għ-t-j") ; nghata_GHTJ_7_10768_V = mkV_VII "għata" "ngħata" (mkRoot "għ-t-j") ;
idda_'DJ_8_10771_V = irregularV form8 (mkRoot "'-d-j") (mkPattern "i" "e") idda_'DJ_8_10771_V = irregularV form8 (mkRoot "'-d-j") (mkVowels "i" "e")
"iddejt" "iddejt" "idda" "iddiet" "iddejna" "iddejtu" "iddew" "iddejt" "iddejt" "idda" "iddiet" "iddejna" "iddejtu" "iddew"
"niddi" "tiddi" "jiddi" "tiddi" "niddu" "tiddu" "jiddu" "niddi" "tiddi" "jiddi" "tiddi" "niddu" "tiddu" "jiddu"
"iddi" "iddu" "iddi" "iddu"
; ;
idden_'DN_2_10772_V = irregularV form2 (mkRoot "'-d-n") (mkPattern "i" "e") idden_'DN_2_10772_V = irregularV form2 (mkRoot "'-d-n") (mkVowels "i" "e")
"iddint" "iddint" "idden" "iddnet" "iddinna" "iddinntu" "iddnu" "iddint" "iddint" "idden" "iddnet" "iddinna" "iddinntu" "iddnu"
"nidden" "tidden" "jidden" "tidden" "niddnu" "tiddnu" "jiddnu" "nidden" "tidden" "jidden" "tidden" "niddnu" "tiddnu" "jiddnu"
"idden" "iddnu" "idden" "iddnu"
; ;
stieden_'DN_10_10773_V = irregularV form10 (mkRoot "'-d-n") (mkPattern "ie" "e") stieden_'DN_10_10773_V = irregularV form10 (mkRoot "'-d-n") (mkVowels "ie" "e")
"stedint" "stedint" "stieden" "stiednet" "stedinna" "stedintu" "stiednu" "stedint" "stedint" "stieden" "stiednet" "stedinna" "stedintu" "stiednu"
"nistieden" "tistieden" "jistieden" "tistieden" "nistiednu" "tistiednu" "jistiednu" "nistieden" "tistieden" "jistieden" "tistieden" "nistiednu" "tistiednu" "jistiednu"
"stieden" "stiednu" "stieden" "stiednu"
; ;
af_''F_1_10774_V = irregularV form1 (mkRoot "'-'-f") (mkPattern "a" []) af_''F_1_10774_V = irregularV form1 (mkRoot "'-'-f") (mkVowels "a" [])
"kont naf" "kont taf" "kien jaf" "kienet taf" "konna nafu" "kontu tafu" "kienu jafu" --- will fail for negative "kont naf" "kont taf" "kien jaf" "kienet taf" "konna nafu" "kontu tafu" "kienu jafu" --- will fail for negative
"naf" "taf" "jaf" "taf" "nafu" "tafu" "jafu" "naf" "taf" "jaf" "taf" "nafu" "tafu" "jafu"
"kun af" "kunu afu" "kun af" "kunu afu"
; ;
ntaf_''F_7_10775_V = irregularV form2 (mkRoot "'-'-f") (mkPattern "a" []) ntaf_''F_7_10775_V = irregularV form2 (mkRoot "'-'-f") (mkVowels "a" [])
"ntafejt" "ntafejt" "ntaf" "ntafet" "ntafna" "ntaftu" "ntafu" "ntafejt" "ntafejt" "ntaf" "ntafet" "ntafna" "ntaftu" "ntafu"
"nintaf" "tintaf" "jintaf" "tintaf" "nintafu" "tintafu" "jintafu" "nintaf" "tintaf" "jintaf" "tintaf" "nintafu" "tintafu" "jintafu"
"ntaf" "ntafu" "ntaf" "ntafu"
; ;
ha_'HD_1_10776_V = irregularV form1 (mkRoot "'-ħ-d") (mkPattern "a" []) ha_'HD_1_10776_V = irregularV form1 (mkRoot "'-ħ-d") (mkVowels "a" [])
"ħadt" "ħadt" "ħa" "ħadet" "ħadna" "ħadtu" "ħadu" "ħadt" "ħadt" "ħa" "ħadet" "ħadna" "ħadtu" "ħadu"
"nieħu" "tieħu" "jieħu" "tieħu" "nieħdu" "tieħdu" "jieħdu" "nieħu" "tieħu" "jieħu" "tieħu" "nieħdu" "tieħdu" "jieħdu"
"ħu" "ħudu" "ħu" "ħudu"
; ;
ttiehed_'HD_6_10777_V = irregularV form6 (mkRoot "'-ħ-d") (mkPattern "ie" "e") ttiehed_'HD_6_10777_V = irregularV form6 (mkRoot "'-ħ-d") (mkVowels "ie" "e")
"ttieħedt" "ttieħedt" "ttieħed" "ttieħdet" "ttieħedna" "ttieħedtu" "ttieħdu" "ttieħedt" "ttieħedt" "ttieħed" "ttieħdet" "ttieħedna" "ttieħedtu" "ttieħdu"
"nittieħed" "tittieħed" "jittieħed" "tittieħed" "nittieħdu" "tittieħdu" "jittieħdu" "nittieħed" "tittieħed" "jittieħed" "tittieħed" "nittieħdu" "tittieħdu" "jittieħdu"
"ttieħed" "ttieħdu" "ttieħed" "ttieħdu"
; ;
staha_'HJ_10_10778_V = irregularV form10 (mkRoot "'-ħ-j") (mkPattern "a" "a") staha_'HJ_10_10778_V = irregularV form10 (mkRoot "'-ħ-j") (mkVowels "a" "a")
"stħajt" "stħajt" "staħa" "stħiet" "stħajna" "stħajtu" "stħew" "stħajt" "stħajt" "staħa" "stħiet" "stħajna" "stħajtu" "stħew"
"nistħi" "tistħi" "jistħi" "tistħi" "nistħu" "tistħu" "jistħu" "nistħi" "tistħi" "jistħi" "tistħi" "nistħu" "tistħu" "jistħu"
"istħi" "istħu" "istħi" "istħu"
; ;
amar_'MR_1_10779_V = irregularV form1 (mkRoot "'-m-r") (mkPattern "a" "a") -- order, command amar_'MR_1_10779_V = irregularV form1 (mkRoot "'-m-r") (mkVowels "a" "a") -- order, command
"amart" "amart" "amar" "amret" "amarna" "amartu" "amraw" "amart" "amart" "amar" "amret" "amarna" "amartu" "amraw"
"namar" "tamar" "jamar" "tamar" "namraw" "tamraw" "jamraw" "namar" "tamar" "jamar" "tamar" "namraw" "tamraw" "jamraw"
"amar" "amraw" "amar" "amraw"
; ;
amba_'MB_1_10780_V = irregularV form1 (mkRoot "'-m-b") (mkPattern "a" "a") amba_'MB_1_10780_V = irregularV form1 (mkRoot "'-m-b") (mkVowels "a" "a")
"ambajt" "ambajt" "amba" "ambat" "ambajna" "ambajtu" "ambaw" "ambajt" "ambajt" "amba" "ambat" "ambajna" "ambajtu" "ambaw"
"namba" "tamba" "jamba" "tamba" "nambaw" "tambaw" "jambaw" "namba" "tamba" "jamba" "tamba" "nambaw" "tambaw" "jambaw"
"amba" "ambaw" "amba" "ambaw"
; ;
stenna_'NJ_10_10781_V = pastPartV "mistenni" (irregularV form10 (mkRoot "'-n-j") (mkPattern "e" "a") stenna_'NJ_10_10781_V = pastPartV "mistenni" (irregularV form10 (mkRoot "'-n-j") (mkVowels "e" "a")
"stennejt" "stennejt" "stenna" "stenniet" "stennejna" "stennejtu" "stennew" "stennejt" "stennejt" "stenna" "stenniet" "stennejna" "stennejtu" "stennew"
"nistenna" "tistenna" "jistenna" "tistenna" "nistennew" "tistennew" "jistennew" "nistenna" "tistenna" "jistenna" "tistenna" "nistennew" "tistennew" "jistennew"
"stenna" "stennew" "stenna" "stennew"
) ; ) ;
stienes_'NS_10_10782_V = mkV irregular form10 (mkRoot "'-n-s") (mkPattern "ie" "e") stienes_'NS_10_10782_V = mkV irregular form10 (mkRoot "'-n-s") (mkVowels "ie" "e")
"stienist" "stienist" "stienes" "stienset" "stienisna" "stienistu" "stiensu" "stienist" "stienist" "stienes" "stienset" "stienisna" "stienistu" "stiensu"
"nistienes" "tistienes" "jistienes" "tistienes" "nistiensu" "tistiensu" "jistiensu" "nistienes" "tistienes" "jistienes" "tistienes" "nistiensu" "tistiensu" "jistiensu"
"stienes" "stiensu" "stienes" "stiensu"
; ;
izza_'ZJ_2_10783_V = irregularV form2 (mkRoot "'-ż-j") (mkPattern "i" "a") izza_'ZJ_2_10783_V = irregularV form2 (mkRoot "'-ż-j") (mkVowels "i" "a")
"iżżajt" "iżżajt" "iżża" "iżżat" "iżżajna" "iżżajtu" "iżżaw" "iżżajt" "iżżajt" "iżża" "iżżat" "iżżajna" "iżżajtu" "iżżaw"
"niżżi" "tiżżi" "jiżżi" "tiżżi" "niżżu" "tiżżu" "jiżżu" "niżżi" "tiżżi" "jiżżi" "tiżżi" "niżżu" "tiżżu" "jiżżu"
"iżżi" "iżżu" "iżżi" "iżżu"
; ;
azzem_'ZM_2_10784_V = irregularV form2 (mkRoot "'-ż-m") (mkPattern "a" "e") azzem_'ZM_2_10784_V = irregularV form2 (mkRoot "'-ż-m") (mkVowels "a" "e")
"ażżimt" "ażżimt" "ażżem" "ażżmet" "ażżimna" "ażżimtu" "ażżmu" "ażżimt" "ażżimt" "ażżem" "ażżmet" "ażżimna" "ażżimtu" "ażżmu"
"nażżem" "tażżem" "jażżem" "tażżem" "nażżmu" "tażżmu" "jażżmu" "nażżem" "tażżem" "jażżem" "tażżem" "nażżmu" "tażżmu" "jażżmu"
"ażżem" "ażżmu" "ażżem" "ażżmu"
@@ -4273,12 +4273,12 @@ concrete DictMlt of DictMltAbs = CatMlt ** open ParadigmsMlt in {
pexxex_PXX_2_10812_V = mkV_II "pexxex" (mkRoot "p-x-x") ; pexxex_PXX_2_10812_V = mkV_II "pexxex" (mkRoot "p-x-x") ;
penpen_PNPN_1_10813_V = mkV "penpen" (mkRoot "p-n-p-n") ; penpen_PNPN_1_10813_V = mkV "penpen" (mkRoot "p-n-p-n") ;
hezzez_HZZ_2_10814_V = mkV_II "heżżeż" (mkRoot "h-ż-ż") ; hezzez_HZZ_2_10814_V = mkV_II "heżżeż" (mkRoot "h-ż-ż") ;
wera_R'J_1_10815_V = irregularV form4 (mkRoot "r-'-j") (mkPattern "e" "a") wera_R'J_1_10815_V = irregularV form4 (mkRoot "r-'-j") (mkVowels "e" "a")
"urejt" "urejt" "wera" "uriet" "urejna" "urejtu" "urejna" "urejt" "urejt" "wera" "uriet" "urejna" "urejtu" "urejna"
"nuri" "turi" "juri" "turi" "nuru" "turu" "juru" "nuri" "turi" "juri" "turi" "nuru" "turu" "juru"
"uri" "uru" "uri" "uru"
; ;
ntara_R'J_7_10816_V = irregularV form7 (mkRoot "r-'-j") (mkPattern "a" "a") ntara_R'J_7_10816_V = irregularV form7 (mkRoot "r-'-j") (mkVowels "a" "a")
"ntrajt" "ttarajt" "ntara" "ttarat" "ntrajna" "ntrajtu" "ntraw" "ntrajt" "ttarajt" "ntara" "ttarat" "ntrajna" "ntrajtu" "ntraw"
"nintara" "tintara" "jintara" "tintara" "nintaraw" "tintaraw" "jintaraw" "nintara" "tintara" "jintara" "tintara" "nintaraw" "tintaraw" "jintaraw"
"ntara" "ntaraw" "ntara" "ntaraw"

View File

@@ -318,15 +318,15 @@ concrete LexiconMlt of Lexicon = CatMlt **
broad_A = mkA "wiesgħa" "wiesgħa" "wiesgħin" ; broad_A = mkA "wiesgħa" "wiesgħa" "wiesgħin" ;
brown_A = sameA "kannella" ; brown_A = sameA "kannella" ;
clean_A = brokenA "nadif" "nodfa" ; clean_A = brokenA "nadif" "nodfa" ;
clever_A = regA "bravu" ; clever_A = mkA "bravu" ;
cold_A = mkA "kiesaħ" "kiesħa" "kesħin" ; cold_A = mkA "kiesaħ" "kiesħa" "kesħin" ;
correct_A = regA "korrett" ; correct_A = mkA "korrett" ;
dirty_A = regA "maħmuġ" ; dirty_A = mkA "maħmuġ" ;
dry_A = regA "niexef" ; dry_A = mkA "niexef" ;
dull_A = sameA "tad-dwejjaq" ; dull_A = sameA "tad-dwejjaq" ;
easy_A2V = dirA2 (sameA "faċli") ; easy_A2V = dirA2 (sameA "faċli") ;
empty_A = mkA "vojt" "vojta" "vojta" ; empty_A = mkA "vojt" "vojta" "vojta" ;
full_A = regA "mimli" ; full_A = mkA "mimli" ;
fun_AV = sameA "pjaċevoli" ; fun_AV = sameA "pjaċevoli" ;
good_A = mkA "tajjeb" "tajba" "tajbin" ; good_A = mkA "tajjeb" "tajba" "tajbin" ;
green_A = mkA "aħdar" "ħadra" "ħodor" ; green_A = mkA "aħdar" "ħadra" "ħodor" ;
@@ -336,24 +336,24 @@ concrete LexiconMlt of Lexicon = CatMlt **
long_A = brokenA "twil" "twal" "itwal" ; long_A = brokenA "twil" "twal" "itwal" ;
married_A2 = mkA2 (mkA "miżżewweġ" "miżżewġa") lilP ; married_A2 = mkA2 (mkA "miżżewweġ" "miżżewġa") lilP ;
narrow_A = mkA "dejjaq" "dejqa" "dojoq" "idjaq" ; narrow_A = mkA "dejjaq" "dejqa" "dojoq" "idjaq" ;
near_A = regA "viċin" ; near_A = mkA "viċin" ;
new_A = brokenA "ġdid" "ġodda" ; new_A = brokenA "ġdid" "ġodda" ;
old_A = brokenA "qadim" "qodma" "eqdem" ; -- xiħ old_A = brokenA "qadim" "qodma" "eqdem" ; -- xiħ
probable_AS = mkAS (sameA "probabbli") ; probable_AS = mkAS (sameA "probabbli") ;
ready_A = regA "lest" ; ready_A = mkA "lest" ;
red_A = mkA "aħmar" "ħamra" "ħomor" ; red_A = mkA "aħmar" "ħamra" "ħomor" ;
rotten_A = mkA "mħassar" "mħassra" "mħassrin" ; rotten_A = mkA "mħassar" "mħassra" "mħassrin" ;
round_A = regA "tond" ; round_A = mkA "tond" ;
sharp_A = mkA "jaqta'" "taqta'" "jaqtgħu" ; sharp_A = mkA "jaqta'" "taqta'" "jaqtgħu" ;
short_A = brokenA "qasir" "qosra" "iqsar" ; short_A = brokenA "qasir" "qosra" "iqsar" ;
small_A = brokenA "zgħir" "zgħar" "iżgħar" ; small_A = brokenA "zgħir" "zgħar" "iżgħar" ;
smooth_A = regA "lixx" ; smooth_A = mkA "lixx" ;
straight_A = regA "dritt" ; straight_A = mkA "dritt" ;
stupid_A = mkA "iblah" "belha" "boloh" ; stupid_A = mkA "iblah" "belha" "boloh" ;
thick_A = mkA "oħxon" "ħoxna" "ħoxnin" "eħxen" ; thick_A = mkA "oħxon" "ħoxna" "ħoxnin" "eħxen" ;
thin_A = brokenA "rqiq" "rqaq" "rqaq" ; thin_A = brokenA "rqiq" "rqaq" "rqaq" ;
ugly_A = mkA "ikrah" "kerha" "koroh" ; ugly_A = mkA "ikrah" "kerha" "koroh" ;
uncertain_A = regA "inċert" ; uncertain_A = mkA "inċert" ;
warm_A = brokenA "sħun" "sħan" ; warm_A = brokenA "sħun" "sħan" ;
wet_A = mkA "mxarrab" "mxarrba" "mxarrbin" ; wet_A = mkA "mxarrab" "mxarrba" "mxarrbin" ;
white_A = mkA "abjad" "bajda" "bojod" ; white_A = mkA "abjad" "bajda" "bojod" ;

View File

@@ -45,6 +45,54 @@ resource MorphoMlt = ResMlt ** open Prelude in {
a = mkAgr num pers gen ; a = mkAgr num pers gen ;
} ; } ;
{- Noun --------------------------------------------------------------- -}
-- Helper function for inferring noun plural from singulative
-- Nouns with collective & determinate forms should not use this...
inferNounPlural : Str -> Str = \sing ->
case sing of {
_ + "na" => init sing + "iet" ; -- eg WIDNIET
_ + "i" => sing + "n" ; -- eg BAĦRIN, DĦULIN, RAĦLIN
_ + ("a"|"u") => init(sing) + "i" ; -- eg ROTI
_ + "q" => sing + "at" ; -- eg TRIQAT
_ => sing + "i"
} ;
-- Helper function for inferring noun gender from singulative
-- Refer {MDG pg190}
inferNounGender : Str -> Gender = \sing ->
case sing of {
_ + "aġni" => Fem ;
_ + "anti" => Fem ;
_ + "zzjoni" => Fem ;
_ + "ġenesi" => Fem ;
_ + "ite" => Fem ;
_ + "itù" => Fem ;
_ + "joni" => Fem ;
_ + "ojde" => Fem ;
_ + "udni" => Fem ;
_ + ("a"|"à") => Fem ;
_ => Masc
} ;
{- Adjective ------------------------------------------------------------ -}
-- Infer femininine form of adjective from masculine
inferAdjFem : Str -> Str ;
inferAdjFem masc = case masc of {
_ + "ef" => (dropSfx 2 masc) + "fa" ; -- NIEXEF
_ + "u" => (init masc) + "a" ; -- BRAVU
_ + "i" => masc + "ja" ; -- MIMLI
_ => masc + "a" -- VOJT
} ;
-- Infer plural form of adjective from feminine
inferAdjPlural : Str -> Str ;
inferAdjPlural fem = case fem of {
_ + ("f"|"j"|"ġ") + "a" => (init fem) + "in" ; -- NIEXFA, MIMLIJA, MAĦMUĠA
_ => (init fem) + "i" -- BRAVA
} ;
{- Verb ----------------------------------------------------------------- -} {- Verb ----------------------------------------------------------------- -}
oper oper
@@ -64,19 +112,19 @@ resource MorphoMlt = ResMlt ** open Prelude in {
-- IE/I vowel changes -- IE/I vowel changes
-- so far only used in derived verbs -- so far only used in derived verbs
vowelChangesIE : Root -> Pattern -> Pattern = \root,vowels -> vowelChangesIE : Root -> Vowels -> Vowels = \root,vowels ->
case <root, vowels> of { -- see {GO pg93} case <root, vowels> of { -- see {GO pg93}
<{C2="għ"},{V1="ie";V2="e"}> => mkPattern "e" "i" ; -- QIEGĦED > QEGĦIDKOM <{C2="għ"},{V1="ie";V2="e"}> => mkVowels "e" "i" ; -- QIEGĦED > QEGĦIDKOM
<_,{V1="ie";V2="e"}> => mkPattern "i" "i" ; -- WIEĠEB > WIĠIBKOM <_,{V1="ie";V2="e"}> => mkVowels "i" "i" ; -- WIEĠEB > WIĠIBKOM
<_,{V1="ie";V2=""}> => mkPattern "i" ; -- STRIEĦ > STRIĦAJT <_,{V1="ie";V2=""}> => mkVowels "i" ; -- STRIEĦ > STRIĦAJT
_ => vowels _ => vowels
} ; } ;
{- ~~~ Strong Verb ~~~ -} {- ~~~ Strong Verb ~~~ -}
-- Conjugate entire verb in PERFECT tense -- Conjugate entire verb in PERFECT tense
-- Params: Root, Pattern -- Params: Root, Vowels
conjStrongPerf : Root -> Pattern -> (VAgr => Str) = \root,p -> conjStrongPerf : Root -> Vowels -> (VAgr => Str) = \root,p ->
let let
ktib = root.C1 + root.C2 + (case p.V2 of {"e" => "i" ; _ => p.V2 }) + root.C3 ; ktib = root.C1 + root.C2 + (case p.V2 of {"e" => "i" ; _ => p.V2 }) + root.C3 ;
kitb = root.C1 + p.V1 + root.C2 + root.C3 ; kitb = root.C1 + p.V1 + root.C2 + root.C3 ;
@@ -95,11 +143,11 @@ resource MorphoMlt = ResMlt ** open Prelude in {
-- Params: Imperative Singular (eg IKTEB), Imperative Plural (eg IKTBU) -- Params: Imperative Singular (eg IKTEB), Imperative Plural (eg IKTBU)
conjStrongImpf = conjGenericImpf ; conjStrongImpf = conjGenericImpf ;
-- Conjugate entire verb in IMPERATIVE tense, infers vowel patterns -- Conjugate entire verb in IMPERATIVE tense, infers vowel sequence
-- Params: Root, Pattern -- Params: Root, Vowels
conjStrongImp : Root -> Pattern -> (Number => Str) = \root,patt -> conjStrongImp : Root -> Vowels -> (Number => Str) = \root,vseq ->
let let
vwls = vowelChangesStrong patt ; vwls = vowelChangesStrong vseq ;
in in
table { table {
Sg => (vwls!Sg).V1 + root.C1 + root.C2 + (vwls!Sg).V2 + root.C3 ; -- Inti: IKTEB Sg => (vwls!Sg).V1 + root.C1 + root.C2 + (vwls!Sg).V2 + root.C3 ; -- Inti: IKTEB
@@ -107,43 +155,43 @@ resource MorphoMlt = ResMlt ** open Prelude in {
} ; } ;
-- Vowel changes for imperative -- Vowel changes for imperative
vowelChangesStrong : Pattern -> (Number => Pattern) = \patt -> vowelChangesStrong : Vowels -> (Number => Vowels) = \vseq ->
table { table {
Sg => case <patt.V1,patt.V2> of { Sg => case <vseq.V1,vseq.V2> of {
<"a","a"> => mkPattern "o" "o" ; -- RABAT > ORBOT (but: ILGĦAB, AĦBAT) <"a","a"> => mkVowels "o" "o" ; -- RABAT > ORBOT (but: ILGĦAB, AĦBAT)
<"a","e"> => mkPattern "a" "e" ; -- GĦAMEL > AGĦMEL <"a","e"> => mkVowels "a" "e" ; -- GĦAMEL > AGĦMEL
<"e","e"> => mkPattern "i" "e" ; -- FEHEM > IFHEM <"e","e"> => mkVowels "i" "e" ; -- FEHEM > IFHEM
<"e","a"> => mkPattern "i" "a" ; -- FETAĦ > IFTAĦ (but: ONFOĦ) <"e","a"> => mkVowels "i" "a" ; -- FETAĦ > IFTAĦ (but: ONFOĦ)
<"i","e"> => mkPattern "i" "e" ; -- KITEB > IKTEB <"i","e"> => mkVowels "i" "e" ; -- KITEB > IKTEB
<"o","o"> => mkPattern "o" "o" -- GĦOĠOB > OGĦĠOB <"o","o"> => mkVowels "o" "o" -- GĦOĠOB > OGĦĠOB
}; };
Pl => case <patt.V1,patt.V2> of { Pl => case <vseq.V1,vseq.V2> of {
<"a","a"> => mkPattern "o" ; -- RABAT > ORBTU <"a","a"> => mkVowels "o" ; -- RABAT > ORBTU
<"a","e"> => mkPattern "a" ; -- GĦAMEL > AGĦMLU <"a","e"> => mkVowels "a" ; -- GĦAMEL > AGĦMLU
<"e","e"> => mkPattern "i" ; -- FEHEM > IFHMU <"e","e"> => mkVowels "i" ; -- FEHEM > IFHMU
<"e","a"> => mkPattern "i" ; -- FETAĦ > IFTĦU <"e","a"> => mkVowels "i" ; -- FETAĦ > IFTĦU
<"i","e"> => mkPattern "i" ; -- KITEB > IKTBU <"i","e"> => mkVowels "i" ; -- KITEB > IKTBU
<"o","o"> => mkPattern "o" -- GĦOĠOB > OGĦĠBU <"o","o"> => mkVowels "o" -- GĦOĠOB > OGĦĠBU
} }
} ; } ;
{- ~~~ Liquid-Medial Verb ~~~ -} {- ~~~ Liquid-Medial Verb ~~~ -}
-- Conjugate entire verb in PERFECT tense -- Conjugate entire verb in PERFECT tense
-- Params: Root, Pattern -- Params: Root, Vowels
conjLiquidMedialPerf : Root -> Pattern -> (VAgr => Str) = \root,patt -> conjLiquidMedialPerf : Root -> Vowels -> (VAgr => Str) = \root,vseq ->
let let
zlaq : Str = case root.C1 of { zlaq : Str = case root.C1 of {
"għ" => root.C1 + patt.V1 + root.C2 + (case patt.V2 of {"e" => "i" ; _ => patt.V2 }) + root.C3 ; -- GĦAMIL- "għ" => root.C1 + vseq.V1 + root.C2 + (case vseq.V2 of {"e" => "i" ; _ => vseq.V2 }) + root.C3 ; -- GĦAMIL-
_ => root.C1 + root.C2 + (case patt.V2 of {"e" => "i" ; _ => patt.V2 }) + root.C3 -- ŻLAQ- _ => root.C1 + root.C2 + (case vseq.V2 of {"e" => "i" ; _ => vseq.V2 }) + root.C3 -- ŻLAQ-
} ; } ;
zelq = root.C1 + patt.V1 + root.C2 + root.C3 ; zelq = root.C1 + vseq.V1 + root.C2 + root.C3 ;
in in
table { table {
AgP1 Sg => zlaq + "t" ; -- Jiena ŻLAQT AgP1 Sg => zlaq + "t" ; -- Jiena ŻLAQT
AgP2 Sg => zlaq + "t" ; -- Inti ŻLAQT AgP2 Sg => zlaq + "t" ; -- Inti ŻLAQT
AgP3Sg Masc=> root.C1 + patt.V1 + root.C2 + patt.V2 + root.C3 ; -- Huwa ŻELAQ AgP3Sg Masc=> root.C1 + vseq.V1 + root.C2 + vseq.V2 + root.C3 ; -- Huwa ŻELAQ
AgP3Sg Fem => zelq + (case patt.V2 of {"o" => "o" ; _ => "e"}) + "t" ; -- Hija ŻELQET AgP3Sg Fem => zelq + (case vseq.V2 of {"o" => "o" ; _ => "e"}) + "t" ; -- Hija ŻELQET
AgP1 Pl => zlaq + "na" ; -- Aħna ŻLAQNA AgP1 Pl => zlaq + "na" ; -- Aħna ŻLAQNA
AgP2 Pl => zlaq + "tu" ; -- Intom ŻLAQTU AgP2 Pl => zlaq + "tu" ; -- Intom ŻLAQTU
AgP3Pl => zelq + "u" -- Huma ŻELQU AgP3Pl => zelq + "u" -- Huma ŻELQU
@@ -153,11 +201,11 @@ resource MorphoMlt = ResMlt ** open Prelude in {
-- Params: Imperative Singular (eg IŻLOQ), Imperative Plural (eg IŻOLQU) -- Params: Imperative Singular (eg IŻLOQ), Imperative Plural (eg IŻOLQU)
conjLiquidMedialImpf = conjGenericImpf ; conjLiquidMedialImpf = conjGenericImpf ;
-- Conjugate entire verb in IMPERATIVE tense, infers vowel patterns -- Conjugate entire verb in IMPERATIVE tense, infers vowel sequence
-- Params: Root, Pattern -- Params: Root, Vowels
conjLiquidMedialImp : Root -> Pattern -> (Number => Str) = \root,patt -> conjLiquidMedialImp : Root -> Vowels -> (Number => Str) = \root,vseq ->
let let
vwls = vowelChangesLiquidMedial patt ; vwls = vowelChangesLiquidMedial vseq ;
in in
table { table {
Sg => (vwls!Sg).V1 + root.C1 + root.C2 + (vwls!Sg).V2 + root.C3 ; -- Inti: IŻLOQ Sg => (vwls!Sg).V1 + root.C1 + root.C2 + (vwls!Sg).V2 + root.C3 ; -- Inti: IŻLOQ
@@ -165,33 +213,33 @@ resource MorphoMlt = ResMlt ** open Prelude in {
} ; } ;
-- Vowel changes for imperative -- Vowel changes for imperative
vowelChangesLiquidMedial : Pattern -> (Number => Pattern) = \patt -> vowelChangesLiquidMedial : Vowels -> (Number => Vowels) = \vseq ->
table { table {
Sg => case <patt.V1,patt.V2> of { Sg => case <vseq.V1,vseq.V2> of {
<"a","a"> => mkPattern "i" "o" ; -- TALAB > ITLOB but ĦARAQ > AĦRAQ <"a","a"> => mkVowels "i" "o" ; -- TALAB > ITLOB but ĦARAQ > AĦRAQ
<"a","e"> => mkPattern "o" "o" ; -- ĦAREĠ > OĦROĠ <"a","e"> => mkVowels "o" "o" ; -- ĦAREĠ > OĦROĠ
<"e","e"> => mkPattern "e" "e" ; -- ĦELES > EĦLES <"e","e"> => mkVowels "e" "e" ; -- ĦELES > EĦLES
<"e","a"> => mkPattern "i" "o" ; -- ŻELAQ > IŻLOQ <"e","a"> => mkVowels "i" "o" ; -- ŻELAQ > IŻLOQ
<"i","e"> => mkPattern "i" "e" ; -- DILEK > IDLEK <"i","e"> => mkVowels "i" "e" ; -- DILEK > IDLEK
<"o","o"> => mkPattern "i" "o" -- XOROB > IXROB <"o","o"> => mkVowels "i" "o" -- XOROB > IXROB
}; };
Pl => case <patt.V1,patt.V2> of { Pl => case <vseq.V1,vseq.V2> of {
<"a","a"> => mkPattern "i" "o" ; -- TALAB > ITOLBU <"a","a"> => mkVowels "i" "o" ; -- TALAB > ITOLBU
<"a","e"> => mkPattern "o" "o" ; -- ĦAREĠ > OĦORĠU <"a","e"> => mkVowels "o" "o" ; -- ĦAREĠ > OĦORĠU
<"e","e"> => mkPattern "e" "i" ; -- ĦELES > EĦILSU <"e","e"> => mkVowels "e" "i" ; -- ĦELES > EĦILSU
<"e","a"> => mkPattern "i" "o" ; -- ŻELAQ > IŻOLQU <"e","a"> => mkVowels "i" "o" ; -- ŻELAQ > IŻOLQU
<"i","e"> => mkPattern "i" "i" ; -- DILEK > IDILKU <"i","e"> => mkVowels "i" "i" ; -- DILEK > IDILKU
<"o","o"> => mkPattern "i" "o" -- XOROB > IXORBU <"o","o"> => mkVowels "i" "o" -- XOROB > IXORBU
} }
} ; } ;
{- ~~~ Geminated Verb ~~~ -} {- ~~~ Geminated Verb ~~~ -}
-- Conjugate entire verb in PERFECT tense -- Conjugate entire verb in PERFECT tense
-- Params: Root, Pattern -- Params: Root, Vowels
conjGeminatedPerf : Root -> Pattern -> (VAgr => Str) = \root,patt -> conjGeminatedPerf : Root -> Vowels -> (VAgr => Str) = \root,vseq ->
let let
habb = root.C1 + patt.V1 + root.C2 + root.C3 ; habb = root.C1 + vseq.V1 + root.C2 + root.C3 ;
in in
table { table {
AgP1 Sg => habb + "ejt" ; -- Jiena ĦABBEJT AgP1 Sg => habb + "ejt" ; -- Jiena ĦABBEJT
@@ -207,11 +255,11 @@ resource MorphoMlt = ResMlt ** open Prelude in {
-- Params: Imperative Singular (eg IKTEB), Imperative Plural (eg IKTBU) -- Params: Imperative Singular (eg IKTEB), Imperative Plural (eg IKTBU)
conjGeminatedImpf = conjGenericImpf ; conjGeminatedImpf = conjGenericImpf ;
-- Conjugate entire verb in IMPERATIVE tense, infers vowel patterns -- Conjugate entire verb in IMPERATIVE tense, infers vowel sequence
-- Params: Root, Pattern -- Params: Root, Vowels
conjGeminatedImp : Root -> Pattern -> (Number => Str) = \root,patt -> conjGeminatedImp : Root -> Vowels -> (Number => Str) = \root,vseq ->
let let
vwls = vowelChangesGeminated patt ; vwls = vowelChangesGeminated vseq ;
stem_sg = root.C1 + (vwls!Sg).V1 + root.C2 + root.C3 ; stem_sg = root.C1 + (vwls!Sg).V1 + root.C2 + root.C3 ;
in in
table { table {
@@ -220,30 +268,30 @@ resource MorphoMlt = ResMlt ** open Prelude in {
} ; } ;
-- Vowel changes for imperative -- Vowel changes for imperative
vowelChangesGeminated : Pattern -> (Number => Pattern) = \patt -> vowelChangesGeminated : Vowels -> (Number => Vowels) = \vseq ->
\\n => case patt.V1 of { \\n => case vseq.V1 of {
"e" => mkPattern "e" ; -- BEXX > BEXX (?) "e" => mkVowels "e" ; -- BEXX > BEXX (?)
_ => mkPattern "o" -- ĦABB > ĦOBB _ => mkVowels "o" -- ĦABB > ĦOBB
} ; } ;
{- ~~~ Assimilative Verb ~~~ -} {- ~~~ Assimilative Verb ~~~ -}
-- Conjugate entire verb in PERFECT tense -- Conjugate entire verb in PERFECT tense
-- Params: Root, Pattern -- Params: Root, Vowels
conjAssimilativePerf : Root -> Pattern -> (VAgr => Str) = \root,patt -> conjAssimilativePerf : Root -> Vowels -> (VAgr => Str) = \root,vseq ->
let let
wasal = case root.C3 of { wasal = case root.C3 of {
"għ" => root.C1 + patt.V1 + root.C2 + patt.V2 + "j" ; "għ" => root.C1 + vseq.V1 + root.C2 + vseq.V2 + "j" ;
_ => root.C1 + patt.V1 + root.C2 + patt.V2 + root.C3 _ => root.C1 + vseq.V1 + root.C2 + vseq.V2 + root.C3
} ; } ;
wasl = root.C1 + patt.V1 + root.C2 + root.C3 ; wasl = root.C1 + vseq.V1 + root.C2 + root.C3 ;
in in
table { table {
AgP1 Sg => wasal + "t" ; -- Jiena WASALT AgP1 Sg => wasal + "t" ; -- Jiena WASALT
AgP2 Sg => wasal + "t" ; -- Inti WASALT AgP2 Sg => wasal + "t" ; -- Inti WASALT
AgP3Sg Masc=> case root.C3 of { AgP3Sg Masc=> case root.C3 of {
"għ" => root.C1 + patt.V1 + root.C2 + patt.V2 + "'" ; -- Huwa WAQA' "għ" => root.C1 + vseq.V1 + root.C2 + vseq.V2 + "'" ; -- Huwa WAQA'
_ => wasal -- Huwa WASAL _ => wasal -- Huwa WASAL
} ; } ;
AgP3Sg Fem => wasl + "et" ; -- Hija WASLET AgP3Sg Fem => wasl + "et" ; -- Hija WASLET
@@ -256,23 +304,23 @@ resource MorphoMlt = ResMlt ** open Prelude in {
-- Params: Imperative Singular (eg ASAL), Imperative Plural (eg ASLU) -- Params: Imperative Singular (eg ASAL), Imperative Plural (eg ASLU)
conjAssimilativeImpf = conjGenericImpf ; conjAssimilativeImpf = conjGenericImpf ;
-- Conjugate entire verb in IMPERATIVE tense, infers vowel patterns -- Conjugate entire verb in IMPERATIVE tense, infers vowel sequence
-- Params: Root, Pattern -- Params: Root, Vowels
conjAssimilativeImp : Root -> Pattern -> (Number => Str) = \root,patt -> conjAssimilativeImp : Root -> Vowels -> (Number => Str) = \root,vseq ->
table { table {
Sg => patt.V1 + root.C2 + patt.V2 + case root.C3 of { "għ" => "'" ; _ => root.C3 } ; -- Inti: ASAL Sg => vseq.V1 + root.C2 + vseq.V2 + case root.C3 of { "għ" => "'" ; _ => root.C3 } ; -- Inti: ASAL
Pl => patt.V1 + root.C2 + root.C3 + "u" -- Intom: ASLU Pl => vseq.V1 + root.C2 + root.C3 + "u" -- Intom: ASLU
} ; } ;
{- ~~~ Hollow Verb ~~~ -} {- ~~~ Hollow Verb ~~~ -}
-- Conjugate entire verb in PERFECT tense -- Conjugate entire verb in PERFECT tense
-- Params: Root, Pattern -- Params: Root, Vowels
-- Refer: http://blog.johnjcamilleri.com/2012/07/vowel-patterns-maltese-hollow-verb/ -- Refer: http://blog.johnjcamilleri.com/2012/07/vowel-patterns-maltese-hollow-verb/
conjHollowPerf : Root -> Pattern -> (VAgr => Str) = \root,patt -> conjHollowPerf : Root -> Vowels -> (VAgr => Str) = \root,vseq ->
let let
sar = root.C1 + patt.V1 + root.C3 ; sar = root.C1 + vseq.V1 + root.C3 ;
sir = case <patt.V1,root.C2> of { sir = case <vseq.V1,root.C2> of {
<"a","w"> => root.C1 + "o" + root.C3 ; -- DAM, FAR, SAQ (most common case) <"a","w"> => root.C1 + "o" + root.C3 ; -- DAM, FAR, SAQ (most common case)
_ => root.C1 + "i" + root.C3 _ => root.C1 + "i" + root.C3
} }
@@ -300,18 +348,18 @@ resource MorphoMlt = ResMlt ** open Prelude in {
AgP3Pl => pfx_J imp_pl -- Huma JDUMU / JMORRU AgP3Pl => pfx_J imp_pl -- Huma JDUMU / JMORRU
} ; } ;
-- Conjugate entire verb in IMPERATIVE tense, infers vowel patterns -- Conjugate entire verb in IMPERATIVE tense, infers vowel sequence
-- Params: Root, Pattern -- Params: Root, Vowels
-- Refer: http://blog.johnjcamilleri.com/2012/07/vowel-patterns-maltese-hollow-verb/ -- Refer: http://blog.johnjcamilleri.com/2012/07/vowel-patterns-maltese-hollow-verb/
conjHollowImp : Root -> Pattern -> (Number => Str) = \root,patt -> conjHollowImp : Root -> Vowels -> (Number => Str) = \root,vseq ->
let let
sir = case <patt.V1,root.C2> of { sir = case <vseq.V1,root.C2> of {
<"a","w"> => root.C1 + "u" + root.C3 ; -- DAM, FAR, SAQ (most common case) <"a","w"> => root.C1 + "u" + root.C3 ; -- DAM, FAR, SAQ (most common case)
<"a","j"> => root.C1 + "i" + root.C3 ; -- ĠAB, SAB, TAR <"a","j"> => root.C1 + "i" + root.C3 ; -- ĠAB, SAB, TAR
<"ie","j"> => root.C1 + "i" + root.C3 ; -- FIEQ, RIED, ŻIED <"ie","j"> => root.C1 + "i" + root.C3 ; -- FIEQ, RIED, ŻIED
<"ie","w"> => root.C1 + "u" + root.C3 ; -- MIET <"ie","w"> => root.C1 + "u" + root.C3 ; -- MIET
<"e","j"> => root.C1 + "i" + root.C3 ; -- GĦEB <"e","j"> => root.C1 + "i" + root.C3 ; -- GĦEB
_ => Predef.error("Unhandled case in hollow verb:"++root.C1+patt.V1+root.C2+patt.V2+root.C3) _ => Predef.error("Unhandled case in hollow verb:"++root.C1+vseq.V1+root.C2+vseq.V2+root.C3)
} }
in in
table { table {
@@ -322,23 +370,23 @@ resource MorphoMlt = ResMlt ** open Prelude in {
{- ~~~ Lacking Verb ~~~ -} {- ~~~ Lacking Verb ~~~ -}
-- Conjugate entire verb in PERFECT tense -- Conjugate entire verb in PERFECT tense
-- Params: Root, Pattern -- Params: Root, Vowels
conjLackingPerf : Root -> Pattern -> (VAgr => Str) = \root,patt -> conjLackingPerf : Root -> Vowels -> (VAgr => Str) = \root,vseq ->
let let
mxej = root.C1 + root.C2 + patt.V1 + root.C3 mxej = root.C1 + root.C2 + vseq.V1 + root.C3
in in
table { table {
--- i tal-leħen needs to be added here! --- i tal-leħen needs to be added here!
AgP1 Sg => mxej + "t" ; -- Jiena IMXEJT AgP1 Sg => mxej + "t" ; -- Jiena IMXEJT
AgP2 Sg => mxej + "t" ; -- Inti IMXEJT AgP2 Sg => mxej + "t" ; -- Inti IMXEJT
AgP3Sg Masc=> root.C1 + patt.V1 + root.C2 + patt.V2 ; -- Huwa MEXA AgP3Sg Masc=> root.C1 + vseq.V1 + root.C2 + vseq.V2 ; -- Huwa MEXA
AgP3Sg Fem => case patt.V1 of { AgP3Sg Fem => case vseq.V1 of {
"a" => root.C1 + root.C2 + "at" ; -- Hija QRAT "a" => root.C1 + root.C2 + "at" ; -- Hija QRAT
_ => root.C1 + root.C2 + "iet" -- Hija MXIET _ => root.C1 + root.C2 + "iet" -- Hija MXIET
} ; } ;
AgP1 Pl => mxej + "na" ; -- Aħna IMXEJNA AgP1 Pl => mxej + "na" ; -- Aħna IMXEJNA
AgP2 Pl => mxej + "tu" ; -- Intom IMXEJTU AgP2 Pl => mxej + "tu" ; -- Intom IMXEJTU
AgP3Pl => case patt.V1 of { AgP3Pl => case vseq.V1 of {
"a" => root.C1 + root.C2 + "aw" ; -- Huma QRAW "a" => root.C1 + root.C2 + "aw" ; -- Huma QRAW
_ => root.C1 + root.C2 + "ew" -- Huma IMXEW _ => root.C1 + root.C2 + "ew" -- Huma IMXEW
} }
@@ -348,9 +396,9 @@ resource MorphoMlt = ResMlt ** open Prelude in {
-- Params: Imperative Singular (eg IMXI), Imperative Plural (eg IMXU) -- Params: Imperative Singular (eg IMXI), Imperative Plural (eg IMXU)
conjLackingImpf = conjGenericImpf ; conjLackingImpf = conjGenericImpf ;
-- Conjugate entire verb in IMPERATIVE tense, infers vowel patterns -- Conjugate entire verb in IMPERATIVE tense, infers vowel sequence
-- Params: Root, Pattern -- Params: Root, Vowels
conjLackingImp : Root -> Pattern -> (Number => Str) = \root,patt -> conjLackingImp : Root -> Vowels -> (Number => Str) = \root,vseq ->
table { table {
Sg => "i" + root.C1 + root.C2 + "i" ; -- Inti: IMXI Sg => "i" + root.C1 + root.C2 + "i" ; -- Inti: IMXI
Pl => "i" + root.C1 + root.C2 + "u" -- Intom: IMXU Pl => "i" + root.C1 + root.C2 + "u" -- Intom: IMXU
@@ -359,17 +407,17 @@ resource MorphoMlt = ResMlt ** open Prelude in {
{- ~~~ Defective Verb ~~~ -} {- ~~~ Defective Verb ~~~ -}
-- Conjugate entire verb in PERFECT tense -- Conjugate entire verb in PERFECT tense
-- Params: Root, Pattern -- Params: Root, Vowels
conjDefectivePerf : Root -> Pattern -> ( VAgr => Str ) = \root,patt -> conjDefectivePerf : Root -> Vowels -> ( VAgr => Str ) = \root,vseq ->
let let
qlaj = root.C1 + root.C2 + (case patt.V2 of {"e" => "i" ; _ => patt.V2 }) + "j" ; qlaj = root.C1 + root.C2 + (case vseq.V2 of {"e" => "i" ; _ => vseq.V2 }) + "j" ;
qalgh = root.C1 + patt.V1 + root.C2 + root.C3 ; qalgh = root.C1 + vseq.V1 + root.C2 + root.C3 ;
in in
table { table {
AgP1 Sg => qlaj + "t" ; -- Jiena QLAJT AgP1 Sg => qlaj + "t" ; -- Jiena QLAJT
AgP2 Sg => qlaj + "t" ; -- Inti QLAJT AgP2 Sg => qlaj + "t" ; -- Inti QLAJT
AgP3Sg Masc=> root.C1 + patt.V1 + root.C2 + patt.V2 + "'" ; -- Huwa QALA' AgP3Sg Masc=> root.C1 + vseq.V1 + root.C2 + vseq.V2 + "'" ; -- Huwa QALA'
AgP3Sg Fem => qalgh + (case patt.V2 of {"o" => "o" ; _ => "e"}) + "t" ; -- Hija QALGĦET AgP3Sg Fem => qalgh + (case vseq.V2 of {"o" => "o" ; _ => "e"}) + "t" ; -- Hija QALGĦET
AgP1 Pl => qlaj + "na" ; -- Aħna QLAJNA AgP1 Pl => qlaj + "na" ; -- Aħna QLAJNA
AgP2 Pl => qlaj + "tu" ; -- Intom QLAJTU AgP2 Pl => qlaj + "tu" ; -- Intom QLAJTU
AgP3Pl => qalgh + "u" -- Huma QALGĦU AgP3Pl => qalgh + "u" -- Huma QALGĦU
@@ -379,32 +427,32 @@ resource MorphoMlt = ResMlt ** open Prelude in {
-- Params: Imperative Singular (eg IKTEB), Imperative Plural (eg IKTBU) -- Params: Imperative Singular (eg IKTEB), Imperative Plural (eg IKTBU)
conjDefectiveImpf = conjGenericImpf ; conjDefectiveImpf = conjGenericImpf ;
-- Conjugate entire verb in IMPERATIVE tense, infers vowel patterns -- Conjugate entire verb in IMPERATIVE tense, infers vowel sequence
-- Params: Root, Pattern -- Params: Root, Vowels
conjDefectiveImp : Root -> Pattern -> ( Number => Str ) = \root,patt -> conjDefectiveImp : Root -> Vowels -> ( Number => Str ) = \root,vseq ->
let let
v1 = case patt.V1 of { "e" => "i" ; _ => patt.V1 } ; v1 = case vseq.V1 of { "e" => "i" ; _ => vseq.V1 } ;
v_pl : Str = case root.C2 of { #LiquidCons => "i" ; _ => "" } ; -- some verbs require "i" insertion in middle (eg AQILGĦU) v_pl : Str = case root.C2 of { #LiquidCons => "i" ; _ => "" } ; -- some verbs require "i" insertion in middle (eg AQILGĦU)
in in
table { table {
Sg => v1 + root.C1 + root.C2 + patt.V2 + "'" ; -- Inti: AQLA' / IBŻA' Sg => v1 + root.C1 + root.C2 + vseq.V2 + "'" ; -- Inti: AQLA' / IBŻA'
Pl => v1 + root.C1 + v_pl + root.C2 + root.C3 + "u" -- Intom: AQILGĦU / IBŻGĦU Pl => v1 + root.C1 + v_pl + root.C2 + root.C3 + "u" -- Intom: AQILGĦU / IBŻGĦU
} ; } ;
{- ~~~ Quadriliteral Verb (Strong) ~~~ -} {- ~~~ Quadriliteral Verb (Strong) ~~~ -}
-- Conjugate entire verb in PERFECT tense -- Conjugate entire verb in PERFECT tense
-- Params: Root, Pattern -- Params: Root, Vowels
conjQuadPerf : Root -> Pattern -> (VAgr => Str) = \root,patt -> conjQuadPerf : Root -> Vowels -> (VAgr => Str) = \root,vseq ->
let let
dendil = root.C1 + patt.V1 + root.C2 + root.C3 + (case patt.V2 of {"e" => "i" ; _ => patt.V2 }) + root.C4 ; dendil = root.C1 + vseq.V1 + root.C2 + root.C3 + (case vseq.V2 of {"e" => "i" ; _ => vseq.V2 }) + root.C4 ;
dendl = root.C1 + patt.V1 + root.C2 + root.C3 + root.C4 ; dendl = root.C1 + vseq.V1 + root.C2 + root.C3 + root.C4 ;
in in
table { table {
AgP1 Sg => dendil + "t" ; -- Jiena DENDILT AgP1 Sg => dendil + "t" ; -- Jiena DENDILT
AgP2 Sg => dendil + "t" ; -- Inti DENDILT AgP2 Sg => dendil + "t" ; -- Inti DENDILT
AgP3Sg Masc=> root.C1 + patt.V1 + root.C2 + root.C3 + patt.V2 + root.C4 ; -- Huwa DENDIL AgP3Sg Masc=> root.C1 + vseq.V1 + root.C2 + root.C3 + vseq.V2 + root.C4 ; -- Huwa DENDIL
AgP3Sg Fem => dendl + (case patt.V2 of {"o" => "o" ; _ => "e"}) + "t" ; -- Hija DENDLET AgP3Sg Fem => dendl + (case vseq.V2 of {"o" => "o" ; _ => "e"}) + "t" ; -- Hija DENDLET
AgP1 Pl => dendil + "na" ; -- Aħna DENDILNA AgP1 Pl => dendil + "na" ; -- Aħna DENDILNA
AgP2 Pl => dendil + "tu" ; -- Intom DENDILTU AgP2 Pl => dendil + "tu" ; -- Intom DENDILTU
AgP3Pl => dendl + "u" -- Huma DENDLU AgP3Pl => dendl + "u" -- Huma DENDLU
@@ -423,19 +471,19 @@ resource MorphoMlt = ResMlt ** open Prelude in {
AgP3Pl => pfx_J imp_pl -- Huma JDENDLU AgP3Pl => pfx_J imp_pl -- Huma JDENDLU
} ; } ;
-- Conjugate entire verb in IMPERATIVE tense, infers vowel patterns -- Conjugate entire verb in IMPERATIVE tense, infers vowel sequence
-- Params: Root, Pattern -- Params: Root, Vowels
conjQuadImp : Root -> Pattern -> (Number => Str) = \root,patt -> conjQuadImp : Root -> Vowels -> (Number => Str) = \root,vseq ->
table { table {
Sg => root.C1 + patt.V1 + root.C2 + root.C3 + patt.V2 + root.C4 ; -- Inti: DENDEL Sg => root.C1 + vseq.V1 + root.C2 + root.C3 + vseq.V2 + root.C4 ; -- Inti: DENDEL
Pl => root.C1 + patt.V1 + root.C2 + root.C3 + root.C4 + "u" -- Intom: DENDLU Pl => root.C1 + vseq.V1 + root.C2 + root.C3 + root.C4 + "u" -- Intom: DENDLU
} ; } ;
{- ~~~ Quadriliteral Verb (Weak Final) ~~~ -} {- ~~~ Quadriliteral Verb (Weak Final) ~~~ -}
-- Conjugate entire verb in PERFECT tense -- Conjugate entire verb in PERFECT tense
-- Params: Stem -- Params: Stem
conjQuadWeakPerf : Root -> Pattern -> Str -> (VAgr => Str) = \root,patt,imp_sg -> conjQuadWeakPerf : Root -> Vowels -> Str -> (VAgr => Str) = \root,vseq,imp_sg ->
case takeSfx 1 imp_sg of { case takeSfx 1 imp_sg of {
"a" => -- KANTA "a" => -- KANTA
let let
@@ -452,13 +500,13 @@ resource MorphoMlt = ResMlt ** open Prelude in {
} ; } ;
_ => -- SERVI _ => -- SERVI
let let
serve = root.C1 + patt.V1 + root.C2 + root.C3 + "e" ; serve = root.C1 + vseq.V1 + root.C2 + root.C3 + "e" ;
in in
table { table {
AgP1 Sg => serve + "jt" ; -- Jiena SERVEJT AgP1 Sg => serve + "jt" ; -- Jiena SERVEJT
AgP2 Sg => serve + "jt" ; -- Inti SERVEJT AgP2 Sg => serve + "jt" ; -- Inti SERVEJT
AgP3Sg Masc=> root.C1 + patt.V1 + root.C2 + root.C3 + patt.V2 ; -- Huwa SERVA AgP3Sg Masc=> root.C1 + vseq.V1 + root.C2 + root.C3 + vseq.V2 ; -- Huwa SERVA
AgP3Sg Fem => root.C1 + patt.V1 + root.C2 + root.C3 + "iet" ; -- Hija SERVIET AgP3Sg Fem => root.C1 + vseq.V1 + root.C2 + root.C3 + "iet" ; -- Hija SERVIET
AgP1 Pl => serve + "jna" ; -- Aħna SERVEJNA AgP1 Pl => serve + "jna" ; -- Aħna SERVEJNA
AgP2 Pl => serve + "jtu" ; -- Intom SERVEJTU AgP2 Pl => serve + "jtu" ; -- Intom SERVEJTU
AgP3Pl => serve + "w" -- Huma SERVEW AgP3Pl => serve + "w" -- Huma SERVEW
@@ -478,13 +526,13 @@ resource MorphoMlt = ResMlt ** open Prelude in {
AgP3Pl => pfx_J imp_pl -- Huma JSERVU AgP3Pl => pfx_J imp_pl -- Huma JSERVU
} ; } ;
-- Conjugate entire verb in IMPERATIVE tense, infers vowel patterns -- Conjugate entire verb in IMPERATIVE tense, infers vowel sequence
-- Params: Root, Pattern -- Params: Root, Vowels
conjQuadWeakImp : Root -> Pattern -> (Number => Str) = \root,patt -> conjQuadWeakImp : Root -> Vowels -> (Number => Str) = \root,vseq ->
table { table {
--- this is known to fail for KANTA, but that seems like a less common case --- this is known to fail for KANTA, but that seems like a less common case
Sg => root.C1 + patt.V1 + root.C2 + root.C3 + "i" ; -- Inti: SERVI Sg => root.C1 + vseq.V1 + root.C2 + root.C3 + "i" ; -- Inti: SERVI
Pl => root.C1 + patt.V1 + root.C2 + root.C3 + "u" -- Intom: SERVU Pl => root.C1 + vseq.V1 + root.C2 + root.C3 + "u" -- Intom: SERVU
} ; } ;
@@ -542,7 +590,7 @@ resource MorphoMlt = ResMlt ** open Prelude in {
} ; } ;
-- Conjugate entire verb in IMPERATIVE tense -- Conjugate entire verb in IMPERATIVE tense
-- Params: Root, Pattern -- Params: Root, Vowels
conjLoanImp : Str -> (Number => Str) = \mamma -> conjLoanImp : Str -> (Number => Str) = \mamma ->
table { table {
Sg => case mamma of { Sg => case mamma of {
@@ -560,37 +608,37 @@ resource MorphoMlt = ResMlt ** open Prelude in {
conjFormII : VerbInfo -> (VForm => Str) = \i -> conjFormII : VerbInfo -> (VForm => Str) = \i ->
let let
mamma : Str = case i.class of { mamma : Str = case i.class of {
Weak Defective => i.root.C1 + i.patt.V1 + i.root.C2 + i.root.C2 + i.patt.V2 + "'" ; -- QATTA' Weak Defective => i.root.C1 + i.vseq.V1 + i.root.C2 + i.root.C2 + i.vseq.V2 + "'" ; -- QATTA'
Weak Lacking => i.root.C1 + i.patt.V1 + i.root.C2 + i.root.C2 + i.patt.V2 ; -- NEĦĦA Weak Lacking => i.root.C1 + i.vseq.V1 + i.root.C2 + i.root.C2 + i.vseq.V2 ; -- NEĦĦA
_ => i.root.C1 + i.patt.V1 + i.root.C2 + i.root.C2 + i.patt.V2 + i.root.C3 -- WAQQAF _ => i.root.C1 + i.vseq.V1 + i.root.C2 + i.root.C2 + i.vseq.V2 + i.root.C3 -- WAQQAF
} ; } ;
nehhi : Str = case i.class of { nehhi : Str = case i.class of {
Weak Lacking => i.root.C1 + i.patt.V1 + i.root.C2 + i.root.C2 + "i" ; -- NEĦĦI Weak Lacking => i.root.C1 + i.vseq.V1 + i.root.C2 + i.root.C2 + "i" ; -- NEĦĦI
_ => mamma -- WAQQAF _ => mamma -- WAQQAF
} ; } ;
bexxix : Str = case <i.class,i.patt.V1,i.patt.V2> of { bexxix : Str = case <i.class,i.vseq.V1,i.vseq.V2> of {
<Weak Defective,_,_> => i.root.C1 + i.patt.V1 + i.root.C2 + i.root.C2 + i.patt.V2 + "j" ; -- QATTAJ <Weak Defective,_,_> => i.root.C1 + i.vseq.V1 + i.root.C2 + i.root.C2 + i.vseq.V2 + "j" ; -- QATTAJ
<_,"e","a"> => i.root.C1 + i.patt.V1 + i.root.C2 + i.root.C2 + "e" + i.root.C3 ; -- NEĦĦEJ <_,"e","a"> => i.root.C1 + i.vseq.V1 + i.root.C2 + i.root.C2 + "e" + i.root.C3 ; -- NEĦĦEJ
<_,_,"e"> => i.root.C1 + i.patt.V1 + i.root.C2 + i.root.C2 + "i" + i.root.C3 ; <_,_,"e"> => i.root.C1 + i.vseq.V1 + i.root.C2 + i.root.C2 + "i" + i.root.C3 ;
_ => nehhi -- no change _ => nehhi -- no change
} ; } ;
waqqf : Str = case i.class of { waqqf : Str = case i.class of {
Weak Hollow => i.root.C1 + i.patt.V1 + i.root.C2 + i.root.C3 ; -- QAJM Weak Hollow => i.root.C1 + i.vseq.V1 + i.root.C2 + i.root.C3 ; -- QAJM
Weak Lacking => i.root.C1 + i.patt.V1 + i.root.C2 + i.root.C2 ; -- NEĦĦ Weak Lacking => i.root.C1 + i.vseq.V1 + i.root.C2 + i.root.C2 ; -- NEĦĦ
_ => sfx (i.root.C1 + i.patt.V1 + i.root.C2 + i.root.C2) i.root.C3 _ => sfx (i.root.C1 + i.vseq.V1 + i.root.C2 + i.root.C2) i.root.C3
} ; } ;
waqqfu : Str = waqqf + "u" ; waqqfu : Str = waqqf + "u" ;
perf : VAgr => Str = table { perf : VAgr => Str = table {
AgP1 Sg => bexxix + "t" ; AgP1 Sg => bexxix + "t" ;
AgP2 Sg => bexxix + "t" ; AgP2 Sg => bexxix + "t" ;
AgP3Sg Masc => mamma ; AgP3Sg Masc => mamma ;
AgP3Sg Fem => case <i.patt.V1, i.patt.V2> of { AgP3Sg Fem => case <i.vseq.V1, i.vseq.V2> of {
<"e","a"> => waqqf + "iet" ; -- NEĦĦIET <"e","a"> => waqqf + "iet" ; -- NEĦĦIET
_ => waqqf + "et" _ => waqqf + "et"
} ; } ;
AgP1 Pl => bexxix + "na" ; AgP1 Pl => bexxix + "na" ;
AgP2 Pl => bexxix + "tu" ; AgP2 Pl => bexxix + "tu" ;
AgP3Pl => case <i.patt.V1, i.patt.V2> of { AgP3Pl => case <i.vseq.V1, i.vseq.V2> of {
<"e","a"> => waqqf + "ew" ; -- NEĦĦEW <"e","a"> => waqqf + "ew" ; -- NEĦĦEW
_ => waqqf + "u" _ => waqqf + "u"
} }
@@ -618,23 +666,23 @@ resource MorphoMlt = ResMlt ** open Prelude in {
conjFormII_quad : VerbInfo -> (VForm => Str) = \i -> conjFormII_quad : VerbInfo -> (VForm => Str) = \i ->
let let
vowels = extractPattern i.imp ; vowels = extractVowels i.imp ;
mamma : Str = case i.class of { mamma : Str = case i.class of {
Quad QWeak => pfx_T i.root.C1 + i.patt.V1 + i.root.C2 + i.root.C3 + i.patt.V2 ; -- SSERVA Quad QWeak => pfx_T i.root.C1 + i.vseq.V1 + i.root.C2 + i.root.C3 + i.vseq.V2 ; -- SSERVA
_ => pfx_T i.root.C1 + i.patt.V1 + i.root.C2 + i.root.C3 + i.patt.V2 + i.root.C4 -- T-ĦARBAT _ => pfx_T i.root.C1 + i.vseq.V1 + i.root.C2 + i.root.C3 + i.vseq.V2 + i.root.C4 -- T-ĦARBAT
} ; } ;
tharb : Str = case i.class of { tharb : Str = case i.class of {
_ => pfx_T i.root.C1 + i.patt.V1 + i.root.C2 + i.root.C3 _ => pfx_T i.root.C1 + i.vseq.V1 + i.root.C2 + i.root.C3
} ; } ;
tharbt : Str = case i.class of { tharbt : Str = case i.class of {
Quad QWeak => pfx_T i.root.C1 + i.patt.V1 + i.root.C2 + i.root.C3 ; -- SSERV Quad QWeak => pfx_T i.root.C1 + i.vseq.V1 + i.root.C2 + i.root.C3 ; -- SSERV
_ => pfx_T i.root.C1 + i.patt.V1 + i.root.C2 + i.root.C3 + i.root.C4 _ => pfx_T i.root.C1 + i.vseq.V1 + i.root.C2 + i.root.C3 + i.root.C4
} ; } ;
perf : VAgr => Str = perf : VAgr => Str =
let let
tharbat : Str = case <i.class,vowels.V2> of { tharbat : Str = case <i.class,vowels.V2> of {
<Quad QWeak,"i"> => pfx_T i.root.C1 + i.patt.V1 + i.root.C2 + i.root.C3 + "e" + i.root.C4 ; -- SSERVEJ <Quad QWeak,"i"> => pfx_T i.root.C1 + i.vseq.V1 + i.root.C2 + i.root.C3 + "e" + i.root.C4 ; -- SSERVEJ
<Quad QWeak,"a"> => pfx_T i.root.C1 + i.patt.V1 + i.root.C2 + i.root.C3 + "a" + i.root.C4 ; -- TKANTAJ <Quad QWeak,"a"> => pfx_T i.root.C1 + i.vseq.V1 + i.root.C2 + i.root.C3 + "a" + i.root.C4 ; -- TKANTAJ
_ => mamma _ => mamma
} ; } ;
tharbtu : Str = case <i.class, vowels.V2> of { tharbtu : Str = case <i.class, vowels.V2> of {
@@ -707,13 +755,13 @@ resource MorphoMlt = ResMlt ** open Prelude in {
conjFormIII : VerbInfo -> (VForm => Str) = \i -> conjFormIII : VerbInfo -> (VForm => Str) = \i ->
let let
wiegeb : Str = i.root.C1 + i.patt.V1 + i.root.C2 + i.patt.V2 + i.root.C3 ; wiegeb : Str = i.root.C1 + i.vseq.V1 + i.root.C2 + i.vseq.V2 + i.root.C3 ;
wegib : Str = case <i.patt.V1,i.patt.V2> of { wegib : Str = case <i.vseq.V1,i.vseq.V2> of {
<"ie","e"> => i.root.C1 + "e" + i.root.C2 + "i" + i.root.C3 ; <"ie","e"> => i.root.C1 + "e" + i.root.C2 + "i" + i.root.C3 ;
<v1,"e"> => i.root.C1 + v1 + i.root.C2 + "i" + i.root.C3 ; <v1,"e"> => i.root.C1 + v1 + i.root.C2 + "i" + i.root.C3 ;
_ => wiegeb -- no change _ => wiegeb -- no change
} ; } ;
wiegb : Str = sfx (i.root.C1 + i.patt.V1 + i.root.C2) i.root.C3 ; wiegb : Str = sfx (i.root.C1 + i.vseq.V1 + i.root.C2) i.root.C3 ;
wiegbu : Str = wiegb + "u" ; wiegbu : Str = wiegb + "u" ;
perf : VAgr => Str = table { perf : VAgr => Str = table {
AgP1 Sg => wegib + "t" ; AgP1 Sg => wegib + "t" ;
@@ -751,13 +799,13 @@ resource MorphoMlt = ResMlt ** open Prelude in {
conjFormVII : VerbInfo -> Str -> (VForm => Str) = \i,C1 -> conjFormVII : VerbInfo -> Str -> (VForm => Str) = \i,C1 ->
let let
nhasel : Str = case i.class of { nhasel : Str = case i.class of {
Weak Hollow => C1 + i.patt.V1 + i.root.C3 ; Weak Hollow => C1 + i.vseq.V1 + i.root.C3 ;
Weak Lacking => C1 + i.patt.V1 + i.root.C2 + i.patt.V2 ; Weak Lacking => C1 + i.vseq.V1 + i.root.C2 + i.vseq.V2 ;
Weak Defective => C1 + i.patt.V1 + i.root.C2 + i.patt.V2 + "'" ; Weak Defective => C1 + i.vseq.V1 + i.root.C2 + i.vseq.V2 + "'" ;
_ => C1 + i.patt.V1 + i.root.C2 + i.patt.V2 + i.root.C3 _ => C1 + i.vseq.V1 + i.root.C2 + i.vseq.V2 + i.root.C3
} ; } ;
v1 : Str = case i.patt.V1 of { "ie" => "e" ; v => v } ; v1 : Str = case i.vseq.V1 of { "ie" => "e" ; v => v } ;
v2 : Str = case i.patt.V2 of { "e" => "i" ; v => v } ; v2 : Str = case i.vseq.V2 of { "e" => "i" ; v => v } ;
-- nhsil : Str = case <i.class,i.root.C1> of { -- nhsil : Str = case <i.class,i.root.C1> of {
-- <Strong Regular,_> => C1 + i.root.C2 + v2 + i.root.C3 ; -- <Strong Regular,_> => C1 + i.root.C2 + v2 + i.root.C3 ;
-- <Strong LiquidMedial,_> => C1 + v1 + i.root.C2 + v2 + i.root.C3 ; -- <Strong LiquidMedial,_> => C1 + v1 + i.root.C2 + v2 + i.root.C3 ;
@@ -775,9 +823,9 @@ resource MorphoMlt = ResMlt ** open Prelude in {
_ => C1 + v1 + i.root.C2 + v2 + i.root.C3 _ => C1 + v1 + i.root.C2 + v2 + i.root.C3
} ; } ;
nhasl : Str = case i.class of { nhasl : Str = case i.class of {
Weak Hollow => C1 + i.patt.V1 + i.root.C3 ; Weak Hollow => C1 + i.vseq.V1 + i.root.C3 ;
Weak Lacking => C1 + i.root.C2 ; Weak Lacking => C1 + i.root.C2 ;
_ => sfx (C1 + i.patt.V1 + i.root.C2) i.root.C3 _ => sfx (C1 + i.vseq.V1 + i.root.C2) i.root.C3
} ; } ;
nhaslu : Str = case i.class of { nhaslu : Str = case i.class of {
Weak Lacking => nhasl + "ew" ; Weak Lacking => nhasl + "ew" ;

View File

@@ -55,38 +55,134 @@ resource ParadigmsMlt = open
loan = Loan ; loan = Loan ;
irregular = Irregular ; irregular = Irregular ;
{- Type declarations only (for synopsis) ------------------------------ -}
mkN : overload {
mkN : Str -> N ; -- 1: Take the singular and infer plural
mkN : Str -> Gender -> N ; -- 1: Explicit gender
mkN : Str -> Str -> N ; -- 1: Take the singular and explicit plural
mkN : Str -> Str -> Gender -> N ; -- 1: Explicit gender
mkN : Str -> Str -> Str -> N ; -- 1x: Take singular and both plurals
mkN : Str -> Str -> Str -> Gender -> N ; -- 1x: Explicit gender
} ;
mkNColl : overload {
mkNColl : Str -> N ; -- 2c: Collective form only
mkNColl : Str -> Str -> N ; -- 2b: Collective and plural
mkNColl : Str -> Str -> Str -> N ; -- 2: Singular, collective and plural
mkNColl : Str -> Str -> Str -> Str -> N ; -- 2x: Singular, collective and both plurals
} ;
mkNNoPlural : overload {
mkNNoPlural : Str -> N ; -- 3: No plural
mkNNoPlural : Str -> Gender -> N ; -- 3: Explicit gender
} ;
mkNDual : overload {
mkNDual : Str -> N ; -- 4: Infer dual, plural and gender from singular
mkNDual : Str -> Str -> Str -> N ; -- 4: Singular, dual, plural
mkNDual : Str -> Str -> Str -> Gender -> N ; -- 4: Explicit gender
mkNDual : Str -> Str -> Str -> Str -> N ; -- 4x: Singular, dual, both plurals
mkNDual : Str -> Str -> Str -> Str -> Gender -> N ; -- 4x: Explicit gender
} ;
mkPN : Str -> Gender -> Number -> ProperNoun ; -- Proper noun
mkN2 : overload {
mkN2 : N -> Prep -> N2 ;
mkN2 : N -> Str -> N2 ;
mkN2 : N -> N2 ; -- use "ta'"
} ;
mkN3 : Noun -> Prep -> Prep -> N3 ;
possN : N -> N ; -- Mark a noun as taking possessive enclitic pronouns: missieri, missierek...
mkRoot : overload {
mkRoot : Root ; -- Null root
mkRoot : Str -> Root ; -- From hyphenated string: "k-t-b"
mkRoot : Str -> Str -> Str -> Root ; -- Tri-consonantal root
mkRoot : Str -> Str -> Str -> Str -> Root ; -- Quadri-consonantal root
} ;
mkVowels : overload {
mkVowels : Vowels ; -- Null vowel sequence
mkVowels : Str -> Vowels ; -- Only single vowel
mkVowels : Str -> Str -> Vowels ; -- Two-vowel sequence
} ;
-- Smart paradigm for building a verb
mkV : overload {
mkV : Str -> V ; -- With no root, automatically treat as loan verb
mkV : Str -> Root -> V ; -- Take an explicit root, implying it is a root & pattern verb
mkV : Str -> Str -> Root -> V ; -- Takes an Imperative of the word for when it behaves less predictably
mkV : VClass -> VDerivedForm -> Root -> Vowels -> (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_ : Str) -> V ; -- All forms: mkV (Strong Regular) (FormI) (mkRoot "k-t-b") (mkVowels "i" "e") "ktibt" "ktibt" "kiteb" "kitbet" "ktibna" "ktibtu" "kitbu" "nikteb" "tikteb" "jikteb" "tikteb" "niktbu" "tiktbu" "jiktbu" "ikteb" "iktbu"
} ;
mkV_II : overload {
mkV_II : Str -> Root -> V ; -- Form II verb: mkV_II "waqqaf" (mkRoot "w-q-f")
mkV_II : Str -> Str -> Root -> V ; -- Form II verb with explicit imperative form: mkV_II "waqqaf" "waqqaf" (mkRoot "w-q-f")
} ;
mkV_III : Str -> Root -> V ; -- Form III verb: mkV_III "qiegħed" (mkRoot "q-għ-d")
mkV_V : Str -> Root -> V ; -- Form V verb: mkV_V "twaqqaf" (mkRoot "w-q-f")
mkV_VI : Str -> Root -> V ; -- Form VI verb: mkV_VI "tqiegħed" (mkRoot "q-għ-d")
mkV_VII : Str -> Str -> Root -> V ; -- Form VII verb: mkV_VII "xeħet" "nxteħet" (mkRoot "x-ħ-t")
mkV_VIII : Str -> Root -> V ; -- Form VIII verb: mkV_VIII "xteħet" (mkRoot "x-ħ-t")
mkV_IX : Str -> Root -> V ; -- Form IX verb: mkV_IX "sfar" (mkRoot "s-f-r")
mkV_X : Str -> Root -> V ; -- Form X verb: mkV_X "stagħġeb" (mkRoot "għ-ġ-b")
presPartV : overload {
presPartV : Str -> V -> V ; -- Add the present participle to a verb: ħiereġ
presPartV : Str -> Str -> Str -> V -> V ; -- Add the present participle to a verb: ħiereġ, ħierġa, ħierġin
} ;
pastPartV : overload {
pastPartV : Str -> V -> V ; -- Add the past participle to a verb: miktub
pastPartV : Str -> Str -> Str -> V -> V ; -- Add the past participle to a verb: miktub, miktuba, miktubin
} ;
mkVS : V -> VS ; -- sentence-compl
mkV3 : overload {
mkV3 : V -> V3 ; -- ditransitive: give,_,_
mkV3 : V -> Prep -> Prep -> V3 ; -- two prepositions: speak, with, about
mkV3 : V -> Prep -> V3 ; -- one preposition: give,_,to
};
mkV2V : V -> Prep -> Prep -> V2V ; -- want (noPrep NP) (to VP)
mkConj : overload {
mkConj : Str -> Conj ; -- Conjunction: wieħed tnejn u tlieta
mkConj : Str -> Str -> Conj ; -- Conjunction: wieħed , tnejn u tlieta
} ;
mkA : overload {
mkA : Str -> A ; -- Regular adjective with predictable feminine and plural forms: bravu
mkA : Str -> Str -> A ; -- Infer feminine from masculine; no comparative form: sabiħ, sbieħ
mkA : Str -> Str -> Str -> A ; -- Explicit feminine form; no comparative form: sabiħ, sabiħa, sbieħ
mkA : Str -> Str -> Str -> Str -> A ; -- All forms: sabiħ, sabiħa, sbieħ, isbaħ
} ;
sameA : Str -> A ; -- Adjective with same forms for masculine, feminine and plural: blu
mkA2 : overload {
mkA2 : A -> Prep -> A2 ;
mkA2 : A -> Str -> A2 ;
} ;
mkAS : A -> AS ;
mkAdv : Str -> Adv ; -- post-verbal adverb: illum
mkAdV : Str -> AdV ; -- preverbal adverb: dejjem
mkAdA : Str -> AdA ; -- adverb modifying adjective: pjuttost
mkAdN : Str -> AdN ; -- adverb modifying numeral: madwar
--.
-- Everything below this is definitions (excluded from synopsis)
{- Noun --------------------------------------------------------------- -} {- Noun --------------------------------------------------------------- -}
-- Helper function for inferring noun plural from singulative
-- Nouns with collective & determinate forms should not use this...
inferNounPlural : Str -> Str = \sing ->
case sing of {
_ + "na" => init sing + "iet" ; -- eg WIDNIET
_ + "i" => sing + "n" ; -- eg BAĦRIN, DĦULIN, RAĦLIN
_ + ("a"|"u") => init(sing) + "i" ; -- eg ROTI
_ + "q" => sing + "at" ; -- eg TRIQAT
_ => sing + "i"
} ;
-- Helper function for inferring noun gender from singulative
-- Refer {MDG pg190}
inferNounGender : Str -> Gender = \sing ->
case sing of {
_ + "aġni" => Fem ;
_ + "anti" => Fem ;
_ + "zzjoni" => Fem ;
_ + "ġenesi" => Fem ;
_ + "ite" => Fem ;
_ + "itù" => Fem ;
_ + "joni" => Fem ;
_ + "ojde" => Fem ;
_ + "udni" => Fem ;
_ + ("a"|"à") => Fem ;
_ => Masc
} ;
-- Noun paradigm 1(x): singular and plural(s) -- Noun paradigm 1(x): singular and plural(s)
mkN : N = overload { mkN = overload {
-- 1: Take the singular and infer plural -- 1: Take the singular and infer plural
mkN : Str -> N = \sing -> mkN : Str -> N = \sing ->
@@ -224,8 +320,7 @@ resource ParadigmsMlt = open
mkN3 = \n,p,q -> lin N3 (n ** {c2 = hasCompl p ; c3 = hasCompl q}) ; mkN3 = \n,p,q -> lin N3 (n ** {c2 = hasCompl p ; c3 = hasCompl q}) ;
-- Mark a noun as taking possessive enclitic pronouns -- Mark a noun as taking possessive enclitic pronouns
possN : N -> N ; possN : N -> N = \n -> lin N {
possN = \n -> lin N {
s = n.s ; s = n.s ;
g = n.g ; g = n.g ;
hasColl = n.hasColl ; hasColl = n.hasColl ;
@@ -376,39 +471,11 @@ resource ParadigmsMlt = open
mkRoot : Str -> Str -> Str -> Str -> Root = \s0,s1,s2,s3 -> ResMlt.mkRoot s0 s1 s2 s3 ; mkRoot : Str -> Str -> Str -> Str -> Root = \s0,s1,s2,s3 -> ResMlt.mkRoot s0 s1 s2 s3 ;
} ; } ;
-- Re-export ResMlt.mkPattern -- Re-export ResMlt.mkVowels
mkPattern : Pattern = overload { mkVowels : Vowels = overload {
mkPattern : Pattern = ResMlt.mkPattern ; mkVowels : Vowels = ResMlt.mkVowels ;
mkPattern : Str -> Pattern = \s0 -> ResMlt.mkPattern s0 ; mkVowels : Str -> Vowels = \s0 -> ResMlt.mkVowels s0 ;
mkPattern : Str -> Str -> Pattern = \s0,s1 -> ResMlt.mkPattern s0 s1 ; mkVowels : Str -> Str -> Vowels = \s0,s1 -> ResMlt.mkVowels s0 s1 ;
} ;
-- Return the class for a given root
classifyRoot : Root -> VClass = \r ->
case <r.C1,r.C2,r.C3,r.C4> of {
<#WeakCons, #StrongCons, #StrongCons, ""> => Weak Assimilative ;
<#StrongCons, #WeakCons, #StrongCons, ""> => Weak Hollow ;
<#StrongCons, #StrongCons, #WeakCons, ""> => Weak Lacking ;
<#StrongCons, #WeakCons, #WeakCons, ""> => Weak Lacking ;
<#Consonant, #Consonant, "għ", ""> => Weak Defective ;
<#Consonant, c2@#Consonant, c3@#Consonant, ""> =>
if_then_else VClass (pbool2bool (eqStr c2 c3))
(Strong Geminated)
(case c2 of {
#LiquidCons => Strong LiquidMedial ;
_ => Strong Regular
}) ;
<#Consonant, #Consonant, #Consonant, #WeakCons> => Quad QWeak ;
<#Consonant, #Consonant, #Consonant, #Consonant> => Quad QStrong ;
-- Irregular
<"'",_,_,_> => Irregular ;
<_,"'",_,_> => Irregular ;
<_,_,"'",_> => Irregular ;
<_,_,_,"'"> => Irregular ;
<_,_,_,""> => Predef.error("Cannot classify root:"++r.C1+"-"+r.C2+"-"+r.C3) ;
<_,_,_,_> => Predef.error("Cannot classify root:"++r.C1+"-"+r.C2+"-"+r.C3+"-"+r.C4)
} ; } ;
-- Smart paradigm for building a verb -- Smart paradigm for building a verb
@@ -423,47 +490,47 @@ resource ParadigmsMlt = open
mkV : Str -> Root -> V = \mamma,root -> mkV : Str -> Root -> V = \mamma,root ->
let let
class : VClass = classifyRoot root ; class : VClass = classifyRoot root ;
patt : Pattern = extractPattern mamma ; vseq : Vowels = extractVowels mamma ;
in in
case class of { case class of {
Strong Regular => strongV root patt ; Strong Regular => strongV root vseq ;
Strong LiquidMedial => liquidMedialV root patt ; Strong LiquidMedial => liquidMedialV root vseq ;
Strong Geminated => geminatedV root patt ; Strong Geminated => geminatedV root vseq ;
Weak Assimilative => assimilativeV root patt ; Weak Assimilative => assimilativeV root vseq ;
Weak Hollow => hollowV root patt ; Weak Hollow => hollowV root vseq ;
Weak Lacking => lackingV root patt ; Weak Lacking => lackingV root vseq ;
Weak Defective => defectiveV root patt ; Weak Defective => defectiveV root vseq ;
Quad QStrong => quadV root patt ; Quad QStrong => quadV root vseq ;
Quad QWeak => quadWeakV root patt ; Quad QWeak => quadWeakV root vseq ;
Irregular => Predef.error("Cannot use smart paradigm for irregular verb:"++mamma) ; Irregular => Predef.error("Cannot use smart paradigm for irregular verb:"++mamma) ;
Loan => loanV mamma --- this should probably be an error Loan => loanV mamma --- this should probably be an error
} ; } ;
-- Takes takes an Imperative of the word for when it behaves less predictably -- Takes an Imperative of the word for when it behaves less predictably
-- Params: mamma, imperative P2Sg, root -- Params: mamma, imperative P2Sg, root
mkV : Str -> Str -> Root -> V = \mamma,imp_sg,root -> mkV : Str -> Str -> Root -> V = \mamma,imp_sg,root ->
let let
class : VClass = classifyRoot root ; class : VClass = classifyRoot root ;
patt : Pattern = extractPattern mamma ; vseq : Vowels = extractVowels mamma ;
in in
case class of { case class of {
Strong Regular => strongV root patt imp_sg ; Strong Regular => strongV root vseq imp_sg ;
Strong LiquidMedial => liquidMedialV root patt imp_sg ; Strong LiquidMedial => liquidMedialV root vseq imp_sg ;
Strong Geminated => geminatedV root patt imp_sg ; Strong Geminated => geminatedV root vseq imp_sg ;
Weak Assimilative => assimilativeV root patt imp_sg ; Weak Assimilative => assimilativeV root vseq imp_sg ;
Weak Hollow => hollowV root patt imp_sg ; Weak Hollow => hollowV root vseq imp_sg ;
Weak Lacking => lackingV root patt imp_sg ; Weak Lacking => lackingV root vseq imp_sg ;
Weak Defective => defectiveV root patt imp_sg ; Weak Defective => defectiveV root vseq imp_sg ;
Quad QStrong => quadV root patt imp_sg ; Quad QStrong => quadV root vseq imp_sg ;
Quad QWeak => quadWeakV root patt imp_sg ; Quad QWeak => quadWeakV root vseq imp_sg ;
Irregular => Predef.error("Cannot use smart paradigm for irregular verb:"++mamma) ; Irregular => Predef.error("Cannot use smart paradigm for irregular verb:"++mamma) ;
Loan => loanV mamma Loan => loanV mamma
} ; } ;
-- All forms -- All forms
-- mkV (Strong Regular) (FormI) (mkRoot "k-t-b") (mkPattern "i" "e") "ktibt" "ktibt" "kiteb" "kitbet" "ktibna" "ktibtu" "kitbu" "nikteb" "tikteb" "jikteb" "tikteb" "niktbu" "tiktbu" "jiktbu" "ikteb" "iktbu" -- mkV (Strong Regular) (FormI) (mkRoot "k-t-b") (mkVowels "i" "e") "ktibt" "ktibt" "kiteb" "kitbet" "ktibna" "ktibtu" "kitbu" "nikteb" "tikteb" "jikteb" "tikteb" "niktbu" "tiktbu" "jiktbu" "ikteb" "iktbu"
mkV : VClass -> VDerivedForm -> Root -> Pattern -> (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_ : Str) -> V = mkV : VClass -> VDerivedForm -> Root -> Vowels -> (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_ : Str) -> V =
\class, form, root, patt, \class, form, root, vseq,
perfP1Sg, perfP2Sg, perfP3SgMasc, perfP3SgFem, perfP1Pl, perfP2Pl, perfP3Pl, perfP1Sg, perfP2Sg, perfP3SgMasc, perfP3SgFem, perfP1Pl, perfP2Pl, perfP3Pl,
impfP1Sg, impfP2Sg, impfP3SgMasc, impfP3SgFem, impfP1Pl, impfP2Pl, impfP3Pl, impfP1Sg, impfP2Sg, impfP3SgMasc, impfP3SgFem, impfP1Pl, impfP2Pl, impfP3Pl,
impSg, impPl -> impSg, impPl ->
@@ -488,7 +555,7 @@ resource ParadigmsMlt = open
VPresPart _ => NONEXIST ; VPresPart _ => NONEXIST ;
VPastPart _ => NONEXIST VPastPart _ => NONEXIST
} ; } ;
info : VerbInfo = mkVerbInfo class form root patt impSg ; info : VerbInfo = mkVerbInfo class form root vseq impSg ;
in lin V { in lin V {
s = stemVariantsTbl tbl ; s = stemVariantsTbl tbl ;
i = info ; i = info ;
@@ -532,12 +599,12 @@ resource ParadigmsMlt = open
derivedV_TriII : Str -> Root -> V = \mammaII, root -> derivedV_TriII : Str -> Root -> V = \mammaII, root ->
let let
class : VClass = classifyRoot root ; class : VClass = classifyRoot root ;
patt : Pattern = extractPattern mammaII ; vseq : Vowels = extractVowels mammaII ;
imp : Str = case mammaII of { imp : Str = case mammaII of {
nehh + "a" => nehh + "i" ; --- maybe too generic? nehh + "a" => nehh + "i" ; --- maybe too generic?
_ => mammaII --- assumption: mamma II is also imperative _ => mammaII --- assumption: mamma II is also imperative
} ; } ;
newinfo : VerbInfo = mkVerbInfo class FormII root patt imp ; newinfo : VerbInfo = mkVerbInfo class FormII root vseq imp ;
in lin V { in lin V {
s = stemVariantsTbl (conjFormII newinfo) ; s = stemVariantsTbl (conjFormII newinfo) ;
i = newinfo ; i = newinfo ;
@@ -550,9 +617,9 @@ resource ParadigmsMlt = open
derivedV_QuadII : Str -> Root -> V = \mammaII, root -> derivedV_QuadII : Str -> Root -> V = \mammaII, root ->
let let
class : VClass = classifyRoot root ; class : VClass = classifyRoot root ;
patt : Pattern = extractPattern mammaII ; vseq : Vowels = extractVowels mammaII ;
imp : Str = mammaII ; --- assumption: mamma II is also imperative imp : Str = mammaII ; --- assumption: mamma II is also imperative
newinfo : VerbInfo = mkVerbInfo class FormII root patt imp ; newinfo : VerbInfo = mkVerbInfo class FormII root vseq imp ;
in lin V { in lin V {
s = stemVariantsTbl (conjFormII_quad newinfo) ; s = stemVariantsTbl (conjFormII_quad newinfo) ;
i = newinfo ; i = newinfo ;
@@ -562,8 +629,8 @@ resource ParadigmsMlt = open
derivedV_QuadII : Str -> Str -> Root -> V = \mammaII, imp, root -> derivedV_QuadII : Str -> Str -> Root -> V = \mammaII, imp, root ->
let let
class : VClass = classifyRoot root ; class : VClass = classifyRoot root ;
patt : Pattern = extractPattern mammaII ; vseq : Vowels = extractVowels mammaII ;
newinfo : VerbInfo = mkVerbInfo class FormII root patt imp ; newinfo : VerbInfo = mkVerbInfo class FormII root vseq imp ;
in lin V { in lin V {
s = stemVariantsTbl (conjFormII_quad newinfo) ; s = stemVariantsTbl (conjFormII_quad newinfo) ;
i = newinfo ; i = newinfo ;
@@ -576,9 +643,9 @@ resource ParadigmsMlt = open
-- e.g.: derivedV_III "qiegħed" (mkRoot "q-għ-d") -- e.g.: derivedV_III "qiegħed" (mkRoot "q-għ-d")
derivedV_III : Str -> Root -> V = \mammaIII, root -> derivedV_III : Str -> Root -> V = \mammaIII, root ->
let let
patt : Pattern = extractPattern mammaIII ; vseq : Vowels = extractVowels mammaIII ;
class : VClass = classifyRoot root ; class : VClass = classifyRoot root ;
info : VerbInfo = mkVerbInfo class FormIII root patt mammaIII ; --- assumption: mamma III is also imperative info : VerbInfo = mkVerbInfo class FormIII root vseq mammaIII ; --- assumption: mamma III is also imperative
in lin V { in lin V {
s = stemVariantsTbl (conjFormIII info) ; s = stemVariantsTbl (conjFormIII info) ;
i = info ; i = info ;
@@ -596,7 +663,7 @@ resource ParadigmsMlt = open
-- use the Form II conjugation, just prefixing a T -- use the Form II conjugation, just prefixing a T
mammaII : Str = dropPfx 1 mammaV ; -- WAQQAF mammaII : Str = dropPfx 1 mammaV ; -- WAQQAF
vII : V = derivedV_II mammaII root ; vII : V = derivedV_II mammaII root ;
info : VerbInfo = mkVerbInfo vII.i.class FormV vII.i.root vII.i.patt mammaV ; info : VerbInfo = mkVerbInfo vII.i.class FormV vII.i.root vII.i.vseq mammaV ;
get : VForm -> Str = \vf -> (vII.s ! vf).s1 ; get : VForm -> Str = \vf -> (vII.s ! vf).s1 ;
tbl : VForm => Str = table { tbl : VForm => Str = table {
VPerf agr => pfx_T (get (VPerf agr)) ; VPerf agr => pfx_T (get (VPerf agr)) ;
@@ -652,7 +719,7 @@ resource ParadigmsMlt = open
derivedV_VII : Str -> Str -> Root -> V = \mammaI, mammaVII, root -> derivedV_VII : Str -> Str -> Root -> V = \mammaI, mammaVII, root ->
let let
class : VClass = classifyRoot root ; class : VClass = classifyRoot root ;
vowels : Pattern = extractPattern mammaI ; vowels : Vowels = extractVowels mammaI ;
c1 : Str = case mammaVII of { c1 : Str = case mammaVII of {
"n" + c@#Cns + "t" + _ => "n"+c+"t" ; -- NXT-EĦET "n" + c@#Cns + "t" + _ => "n"+c+"t" ; -- NXT-EĦET
"ntgħ" + _ => "ntgħ" ; -- NTGĦ-AĠEN "ntgħ" + _ => "ntgħ" ; -- NTGĦ-AĠEN
@@ -675,7 +742,7 @@ resource ParadigmsMlt = open
let let
mammaI : Str = delCharAt 1 mammaVIII ; mammaI : Str = delCharAt 1 mammaVIII ;
class : VClass = classifyRoot root ; class : VClass = classifyRoot root ;
vowels : Pattern = extractPattern mammaI ; vowels : Vowels = extractVowels mammaI ;
info : VerbInfo = mkVerbInfo class FormVIII root vowels mammaVIII ; info : VerbInfo = mkVerbInfo class FormVIII root vowels mammaVIII ;
c1 : Str = root.C1+"t"; c1 : Str = root.C1+"t";
in lin V { in lin V {
@@ -686,15 +753,15 @@ resource ParadigmsMlt = open
} ; } ;
-- Make a Form IX verb -- Make a Form IX verb
-- e.g.: derivedV_IX "sfar" -- e.g.: derivedV_IX "sfar" (mkRoot "s-f-r")
derivedV_IX : Str -> Root -> V = \mammaIX, root -> derivedV_IX : Str -> Root -> V = \mammaIX, root ->
case mammaIX of { case mammaIX of {
-- c1@#Consonant + c2@#Consonant + v1@("ie"|"a") + c3@#Consonant => -- c1@#Consonant + c2@#Consonant + v1@("ie"|"a") + c3@#Consonant =>
_ + v1@("ie"|"a"|"â") + _ => _ + v1@("ie"|"a"|"â") + _ =>
let let
patt : Pattern = mkPattern v1 ; vseq : Vowels = mkVowels v1 ;
class : VClass = classifyRoot root ; class : VClass = classifyRoot root ;
info : VerbInfo = mkVerbInfo class FormIX root patt mammaIX ; info : VerbInfo = mkVerbInfo class FormIX root vseq mammaIX ;
in lin V { in lin V {
s = stemVariantsTbl (conjFormIX info) ; s = stemVariantsTbl (conjFormIX info) ;
i = info ; i = info ;
@@ -709,8 +776,8 @@ resource ParadigmsMlt = open
derivedV_X : Str -> Root -> V = \mammaX, root -> derivedV_X : Str -> Root -> V = \mammaX, root ->
let let
class : VClass = classifyRoot root ; class : VClass = classifyRoot root ;
patt : Pattern = extractPattern mammaX ; vseq : Vowels = extractVowels mammaX ;
info : VerbInfo = mkVerbInfo class FormX root patt mammaX ; info : VerbInfo = mkVerbInfo class FormX root vseq mammaX ;
in lin V { in lin V {
s = stemVariantsTbl (conjFormX info) ; s = stemVariantsTbl (conjFormX info) ;
i = info ; i = info ;
@@ -723,33 +790,33 @@ resource ParadigmsMlt = open
-- Regular strong verb ("sħiħ"), eg KITEB -- Regular strong verb ("sħiħ"), eg KITEB
strongV : V = overload { strongV : V = overload {
-- Params: root, pattern -- Params: root, vowels
strongV : Root -> Pattern -> V = \root,patt -> strongV : Root -> Vowels -> V = \root,vseq ->
let imp = conjStrongImp root patt let imp = conjStrongImp root vseq
in strongVWorst root patt imp ; in strongVWorst root vseq imp ;
-- Params: root, pattern, imperative P2Sg -- Params: root, vowels, imperative P2Sg
strongV : Root -> Pattern -> Str -> V =\root,patt,imp_sg -> strongV : Root -> Vowels -> Str -> V =\root,vseq,imp_sg ->
let let
imp = table { imp = table {
Sg => imp_sg ; Sg => imp_sg ;
Pl => (takePfx 3 imp_sg) + root.C3 + "u" -- IFTAĦ > IFTĦU Pl => (takePfx 3 imp_sg) + root.C3 + "u" -- IFTAĦ > IFTĦU
} ; } ;
in strongVWorst root patt imp ; in strongVWorst root vseq imp ;
} ; } ;
-- Worst case for strong verb -- Worst case for strong verb
strongVWorst : Root -> Pattern -> (Number => Str) -> V = \root,patt,imp -> strongVWorst : Root -> Vowels -> (Number => Str) -> V = \root,vseq,imp ->
let let
tbl : (VForm => Str) = table { tbl : (VForm => Str) = table {
VPerf agr => ( conjStrongPerf root patt ) ! agr ; VPerf agr => ( conjStrongPerf root vseq ) ! agr ;
VImpf agr => ( conjStrongImpf (imp ! Sg) (imp ! Pl) ) ! agr ; VImpf agr => ( conjStrongImpf (imp ! Sg) (imp ! Pl) ) ! agr ;
VImp n => imp ! n ; VImp n => imp ! n ;
VPresPart _ => NONEXIST ; VPresPart _ => NONEXIST ;
VPastPart _ => NONEXIST VPastPart _ => NONEXIST
} ; } ;
info : VerbInfo = mkVerbInfo (Strong Regular) (FormI) root patt (imp ! Sg) ; info : VerbInfo = mkVerbInfo (Strong Regular) (FormI) root vseq (imp ! Sg) ;
in lin V { in lin V {
s = stemVariantsTbl tbl ; s = stemVariantsTbl tbl ;
i = info ; i = info ;
@@ -763,15 +830,15 @@ resource ParadigmsMlt = open
-- Liquid-medial strong verb, eg ŻELAQ -- Liquid-medial strong verb, eg ŻELAQ
liquidMedialV : V = overload { liquidMedialV : V = overload {
-- Params: root, pattern -- Params: root, vowels
liquidMedialV : Root -> Pattern -> V = \root,patt -> liquidMedialV : Root -> Vowels -> V = \root,vseq ->
let imp = conjLiquidMedialImp root patt let imp = conjLiquidMedialImp root vseq
in liquidMedialVWorst root patt imp ; in liquidMedialVWorst root vseq imp ;
-- Params: root, pattern, imperative P2Sg -- Params: root, vowels, imperative P2Sg
liquidMedialV : Root -> Pattern -> Str -> V = \root,patt,imp_sg -> liquidMedialV : Root -> Vowels -> Str -> V = \root,vseq,imp_sg ->
let let
vowels = extractPattern imp_sg ; vowels = extractVowels imp_sg ;
imp = table { imp = table {
Sg => imp_sg ; Sg => imp_sg ;
Pl => case root.C1 of { Pl => case root.C1 of {
@@ -779,21 +846,21 @@ resource ParadigmsMlt = open
_ => vowels.V1 + root.C1 + vowels.V2 + root.C2 + root.C3 + "u" -- OĦROĠ > OĦORĠU _ => vowels.V1 + root.C1 + vowels.V2 + root.C2 + root.C3 + "u" -- OĦROĠ > OĦORĠU
} }
} ; } ;
in liquidMedialVWorst root patt imp ; in liquidMedialVWorst root vseq imp ;
} ; } ;
-- Worst case for liquid medial strong verb -- Worst case for liquid medial strong verb
liquidMedialVWorst : Root -> Pattern -> (Number => Str) -> V = \root,patt,imp -> liquidMedialVWorst : Root -> Vowels -> (Number => Str) -> V = \root,vseq,imp ->
let let
tbl : (VForm => Str) = table { tbl : (VForm => Str) = table {
VPerf agr => ( conjLiquidMedialPerf root patt ) ! agr ; VPerf agr => ( conjLiquidMedialPerf root vseq ) ! agr ;
VImpf agr => ( conjLiquidMedialImpf (imp ! Sg) (imp ! Pl) ) ! agr ; VImpf agr => ( conjLiquidMedialImpf (imp ! Sg) (imp ! Pl) ) ! agr ;
VImp n => imp ! n ; VImp n => imp ! n ;
VPresPart _ => NONEXIST ; VPresPart _ => NONEXIST ;
VPastPart _ => NONEXIST VPastPart _ => NONEXIST
} ; } ;
info : VerbInfo = mkVerbInfo (Strong LiquidMedial) (FormI) root patt (imp ! Sg) ; info : VerbInfo = mkVerbInfo (Strong LiquidMedial) (FormI) root vseq (imp ! Sg) ;
in lin V { in lin V {
s = stemVariantsTbl tbl ; s = stemVariantsTbl tbl ;
i = info ; i = info ;
@@ -806,33 +873,33 @@ resource ParadigmsMlt = open
-- Geminated strong verb ("trux"), eg ĦABB -- Geminated strong verb ("trux"), eg ĦABB
geminatedV : V = overload { geminatedV : V = overload {
-- Params: root, pattern -- Params: root, vowels
geminatedV : Root -> Pattern -> V = \root,patt -> geminatedV : Root -> Vowels -> V = \root,vseq ->
let imp = conjGeminatedImp root patt let imp = conjGeminatedImp root vseq
in geminatedVWorst root patt imp ; in geminatedVWorst root vseq imp ;
-- Params: root, pattern, imperative P2Sg -- Params: root, vowels, imperative P2Sg
geminatedV : Root -> Pattern -> Str -> V = \root,patt,imp_sg -> geminatedV : Root -> Vowels -> Str -> V = \root,vseq,imp_sg ->
let let
imp = table { imp = table {
Sg => imp_sg ; Sg => imp_sg ;
Pl => imp_sg + "u" -- ŻOMM > ŻOMMU Pl => imp_sg + "u" -- ŻOMM > ŻOMMU
} ; } ;
in geminatedVWorst root patt imp ; in geminatedVWorst root vseq imp ;
}; };
-- Worst case for reduplicated verb -- Worst case for reduplicated verb
geminatedVWorst : Root -> Pattern -> (Number => Str) -> V = \root,patt,imp -> geminatedVWorst : Root -> Vowels -> (Number => Str) -> V = \root,vseq,imp ->
let let
tbl : (VForm => Str) = table { tbl : (VForm => Str) = table {
VPerf agr => ( conjGeminatedPerf root patt ) ! agr ; VPerf agr => ( conjGeminatedPerf root vseq ) ! agr ;
VImpf agr => ( conjGeminatedImpf (imp ! Sg) (imp ! Pl) ) ! agr ; VImpf agr => ( conjGeminatedImpf (imp ! Sg) (imp ! Pl) ) ! agr ;
VImp n => imp ! n ; VImp n => imp ! n ;
VPresPart _ => NONEXIST ; VPresPart _ => NONEXIST ;
VPastPart _ => NONEXIST VPastPart _ => NONEXIST
} ; } ;
info : VerbInfo = mkVerbInfo (Strong Geminated) (FormI) root patt (imp ! Sg) ; info : VerbInfo = mkVerbInfo (Strong Geminated) (FormI) root vseq (imp ! Sg) ;
in lin V { in lin V {
s = stemVariantsTbl tbl ; s = stemVariantsTbl tbl ;
i = info ; i = info ;
@@ -845,33 +912,33 @@ resource ParadigmsMlt = open
-- Assimilative weak verb, eg WASAL -- Assimilative weak verb, eg WASAL
assimilativeV : V = overload { assimilativeV : V = overload {
-- Params: root, pattern -- Params: root, vowels
assimilativeV : Root -> Pattern -> V = \root,patt -> assimilativeV : Root -> Vowels -> V = \root,vseq ->
let imp = conjAssimilativeImp root patt let imp = conjAssimilativeImp root vseq
in assimilativeVWorst root patt imp ; in assimilativeVWorst root vseq imp ;
-- Params: root, pattern, imperative P2Sg -- Params: root, vowels, imperative P2Sg
assimilativeV : Root -> Pattern -> Str -> V =\root,patt,imp_sg -> assimilativeV : Root -> Vowels -> Str -> V =\root,vseq,imp_sg ->
let let
imp = table { imp = table {
Sg => imp_sg ; Sg => imp_sg ;
Pl => (dropSfx 2 imp_sg) + root.C3 + "u" -- ASAL > ASLU Pl => (dropSfx 2 imp_sg) + root.C3 + "u" -- ASAL > ASLU
} ; } ;
in assimilativeVWorst root patt imp ; in assimilativeVWorst root vseq imp ;
} ; } ;
-- Worst case for assimilative verb -- Worst case for assimilative verb
assimilativeVWorst : Root -> Pattern -> (Number => Str) -> V = \root,patt,imp -> assimilativeVWorst : Root -> Vowels -> (Number => Str) -> V = \root,vseq,imp ->
let let
tbl : (VForm => Str) = table { tbl : (VForm => Str) = table {
VPerf agr => ( conjAssimilativePerf root patt ) ! agr ; VPerf agr => ( conjAssimilativePerf root vseq ) ! agr ;
VImpf agr => ( conjAssimilativeImpf (imp ! Sg) (imp ! Pl) ) ! agr ; VImpf agr => ( conjAssimilativeImpf (imp ! Sg) (imp ! Pl) ) ! agr ;
VImp n => imp ! n ; VImp n => imp ! n ;
VPresPart _ => NONEXIST ; VPresPart _ => NONEXIST ;
VPastPart _ => NONEXIST VPastPart _ => NONEXIST
} ; } ;
info : VerbInfo = mkVerbInfo (Weak Assimilative) (FormI) root patt (imp ! Sg) ; info : VerbInfo = mkVerbInfo (Weak Assimilative) (FormI) root vseq (imp ! Sg) ;
in lin V { in lin V {
s = stemVariantsTbl tbl ; s = stemVariantsTbl tbl ;
i = info ; i = info ;
@@ -884,33 +951,33 @@ resource ParadigmsMlt = open
-- Hollow weak verb, eg SAR (S-J-R) -- Hollow weak verb, eg SAR (S-J-R)
hollowV : V = overload { hollowV : V = overload {
-- Params: root, pattern -- Params: root, vowels
hollowV : Root -> Pattern -> V = \root,patt -> hollowV : Root -> Vowels -> V = \root,vseq ->
let imp = conjHollowImp root patt let imp = conjHollowImp root vseq
in hollowVWorst root patt imp ; in hollowVWorst root vseq imp ;
-- Params: root, pattern, imperative P2Sg -- Params: root, vowels, imperative P2Sg
hollowV : Root -> Pattern -> Str -> V =\root,patt,imp_sg -> hollowV : Root -> Vowels -> Str -> V =\root,vseq,imp_sg ->
let let
imp = table { imp = table {
Sg => imp_sg ; Sg => imp_sg ;
Pl => imp_sg + "u" -- SIR > SIRU Pl => imp_sg + "u" -- SIR > SIRU
} ; } ;
in hollowVWorst root patt imp ; in hollowVWorst root vseq imp ;
} ; } ;
-- Worst case for hollow verb -- Worst case for hollow verb
hollowVWorst : Root -> Pattern -> (Number => Str) -> V = \root,patt,imp -> hollowVWorst : Root -> Vowels -> (Number => Str) -> V = \root,vseq,imp ->
let let
tbl : (VForm => Str) = table { tbl : (VForm => Str) = table {
VPerf agr => ( conjHollowPerf root patt ) ! agr ; VPerf agr => ( conjHollowPerf root vseq ) ! agr ;
VImpf agr => ( conjHollowImpf (imp ! Sg) (imp ! Pl) ) ! agr ; VImpf agr => ( conjHollowImpf (imp ! Sg) (imp ! Pl) ) ! agr ;
VImp n => imp ! n ; VImp n => imp ! n ;
VPresPart _ => NONEXIST ; VPresPart _ => NONEXIST ;
VPastPart _ => NONEXIST VPastPart _ => NONEXIST
} ; } ;
info : VerbInfo = mkVerbInfo (Weak Hollow) (FormI) root patt (imp ! Sg) ; info : VerbInfo = mkVerbInfo (Weak Hollow) (FormI) root vseq (imp ! Sg) ;
in lin V { in lin V {
s = stemVariantsTbl tbl ; s = stemVariantsTbl tbl ;
i = info ; i = info ;
@@ -923,13 +990,13 @@ resource ParadigmsMlt = open
-- Lacking (nieqes) verb, eg MEXA (M-X-J) -- Lacking (nieqes) verb, eg MEXA (M-X-J)
lackingV : V = overload { lackingV : V = overload {
-- Params: root, pattern -- Params: root, vowels
lackingV : Root -> Pattern -> V = \root,patt -> lackingV : Root -> Vowels -> V = \root,vseq ->
let imp = conjLackingImp root patt let imp = conjLackingImp root vseq
in lackingVWorst root patt imp ; in lackingVWorst root vseq imp ;
-- Params: root, pattern, imperative P2Sg -- Params: root, vowels, imperative P2Sg
lackingV : Root -> Pattern -> Str -> V =\root,patt,imp_sg -> lackingV : Root -> Vowels -> Str -> V =\root,vseq,imp_sg ->
let let
imp = table { imp = table {
Sg => imp_sg ; Sg => imp_sg ;
@@ -939,21 +1006,21 @@ resource ParadigmsMlt = open
x => (dropSfx 1 x) + "u" --- unknown case x => (dropSfx 1 x) + "u" --- unknown case
} }
} ; } ;
in lackingVWorst root patt imp ; in lackingVWorst root vseq imp ;
} ; } ;
-- Worst case for lacking verb -- Worst case for lacking verb
lackingVWorst : Root -> Pattern -> (Number => Str) -> V = \root,patt,imp -> lackingVWorst : Root -> Vowels -> (Number => Str) -> V = \root,vseq,imp ->
let let
tbl : (VForm => Str) = table { tbl : (VForm => Str) = table {
VPerf agr => ( conjLackingPerf root patt ) ! agr ; VPerf agr => ( conjLackingPerf root vseq ) ! agr ;
VImpf agr => ( conjLackingImpf (imp ! Sg) (imp ! Pl) ) ! agr ; VImpf agr => ( conjLackingImpf (imp ! Sg) (imp ! Pl) ) ! agr ;
VImp n => imp ! n ; VImp n => imp ! n ;
VPresPart _ => NONEXIST ; VPresPart _ => NONEXIST ;
VPastPart _ => NONEXIST VPastPart _ => NONEXIST
} ; } ;
info : VerbInfo = mkVerbInfo (Weak Lacking) (FormI) root patt (imp ! Sg) ; info : VerbInfo = mkVerbInfo (Weak Lacking) (FormI) root vseq (imp ! Sg) ;
in lin V { in lin V {
s = stemVariantsTbl tbl ; s = stemVariantsTbl tbl ;
i = info ; i = info ;
@@ -966,33 +1033,33 @@ resource ParadigmsMlt = open
-- Defective verb, eg QALA' (Q-L-GĦ) -- Defective verb, eg QALA' (Q-L-GĦ)
defectiveV : V = overload { defectiveV : V = overload {
-- Params: root, pattern -- Params: root, vowels
defectiveV : Root -> Pattern -> V = \root,patt -> defectiveV : Root -> Vowels -> V = \root,vseq ->
let imp = conjDefectiveImp root patt let imp = conjDefectiveImp root vseq
in defectiveVWorst root patt imp ; in defectiveVWorst root vseq imp ;
-- Params: root, pattern, imperative P2Sg -- Params: root, vowels, imperative P2Sg
defectiveV : Root -> Pattern -> Str -> V =\root,patt,imp_sg -> defectiveV : Root -> Vowels -> Str -> V =\root,vseq,imp_sg ->
let let
imp = table { imp = table {
Sg => imp_sg ; Sg => imp_sg ;
Pl => (takePfx 2 imp_sg) + "i" + root.C2 + "għu" -- ISMA' > ISIMGĦU Pl => (takePfx 2 imp_sg) + "i" + root.C2 + "għu" -- ISMA' > ISIMGĦU
} ; } ;
in defectiveVWorst root patt imp ; in defectiveVWorst root vseq imp ;
} ; } ;
-- Worst case for defective verb -- Worst case for defective verb
defectiveVWorst : Root -> Pattern -> (Number => Str) -> V = \root,patt,imp -> defectiveVWorst : Root -> Vowels -> (Number => Str) -> V = \root,vseq,imp ->
let let
tbl : (VForm => Str) = table { tbl : (VForm => Str) = table {
VPerf agr => ( conjDefectivePerf root patt ) ! agr ; VPerf agr => ( conjDefectivePerf root vseq ) ! agr ;
VImpf agr => ( conjDefectiveImpf (imp ! Sg) (imp ! Pl) ) ! agr ; VImpf agr => ( conjDefectiveImpf (imp ! Sg) (imp ! Pl) ) ! agr ;
VImp n => imp ! n ; VImp n => imp ! n ;
VPresPart _ => NONEXIST ; VPresPart _ => NONEXIST ;
VPastPart _ => NONEXIST VPastPart _ => NONEXIST
} ; } ;
info : VerbInfo = mkVerbInfo (Weak Defective) (FormI) root patt (imp ! Sg) ; info : VerbInfo = mkVerbInfo (Weak Defective) (FormI) root vseq (imp ! Sg) ;
in lin V { in lin V {
s = stemVariantsTbl tbl ; s = stemVariantsTbl tbl ;
i = info ; i = info ;
@@ -1005,33 +1072,33 @@ resource ParadigmsMlt = open
-- Make a Quad verb, eg DENDEL (D-L-D-L) -- Make a Quad verb, eg DENDEL (D-L-D-L)
quadV : V = overload { quadV : V = overload {
-- Params: root, pattern -- Params: root, vowels
quadV : Root -> Pattern -> V = \root,patt -> quadV : Root -> Vowels -> V = \root,vseq ->
let imp = conjQuadImp root patt let imp = conjQuadImp root vseq
in quadVWorst root patt imp ; in quadVWorst root vseq imp ;
-- Params: root, pattern, imperative P2Sg -- Params: root, vowels, imperative P2Sg
quadV : Root -> Pattern -> Str -> V =\root,patt,imp_sg -> quadV : Root -> Vowels -> Str -> V =\root,vseq,imp_sg ->
let let
imp = table { imp = table {
Sg => imp_sg ; Sg => imp_sg ;
Pl => (takePfx 4 imp_sg) + root.C4 + "u" -- ĦARBAT > ĦARBTU Pl => (takePfx 4 imp_sg) + root.C4 + "u" -- ĦARBAT > ĦARBTU
} ; } ;
in quadVWorst root patt imp ; in quadVWorst root vseq imp ;
} ; } ;
-- Worst case for quad verb -- Worst case for quad verb
quadVWorst : Root -> Pattern -> (Number => Str) -> V = \root,patt,imp -> quadVWorst : Root -> Vowels -> (Number => Str) -> V = \root,vseq,imp ->
let let
tbl : (VForm => Str) = table { tbl : (VForm => Str) = table {
VPerf agr => ( conjQuadPerf root patt ) ! agr ; VPerf agr => ( conjQuadPerf root vseq ) ! agr ;
VImpf agr => ( conjQuadImpf (imp ! Sg) (imp ! Pl) ) ! agr ; VImpf agr => ( conjQuadImpf (imp ! Sg) (imp ! Pl) ) ! agr ;
VImp n => imp ! n ; VImp n => imp ! n ;
VPresPart _ => NONEXIST ; VPresPart _ => NONEXIST ;
VPastPart _ => NONEXIST VPastPart _ => NONEXIST
} ; } ;
info : VerbInfo = mkVerbInfo (Quad QStrong) (FormI) root patt (imp ! Sg) ; info : VerbInfo = mkVerbInfo (Quad QStrong) (FormI) root vseq (imp ! Sg) ;
in lin V { in lin V {
s = stemVariantsTbl tbl ; s = stemVariantsTbl tbl ;
i = info ; i = info ;
@@ -1044,13 +1111,13 @@ resource ParadigmsMlt = open
-- Make a weak-final Quad verb, eg SERVA (S-R-V-J) -- Make a weak-final Quad verb, eg SERVA (S-R-V-J)
quadWeakV : V = overload { quadWeakV : V = overload {
-- Params: root, pattern -- Params: root, vowels
quadWeakV : Root -> Pattern -> V = \root,patt -> quadWeakV : Root -> Vowels -> V = \root,vseq ->
let imp = conjQuadWeakImp root patt let imp = conjQuadWeakImp root vseq
in quadWeakVWorst root patt imp ; in quadWeakVWorst root vseq imp ;
-- Params: root, pattern, imperative P2Sg -- Params: root, vowels, imperative P2Sg
quadWeakV : Root -> Pattern -> Str -> V =\root,patt,imp_sg -> quadWeakV : Root -> Vowels -> Str -> V =\root,vseq,imp_sg ->
let let
imp = table { imp = table {
Sg => imp_sg ; Sg => imp_sg ;
@@ -1059,21 +1126,21 @@ resource ParadigmsMlt = open
_ => (dropSfx 1 imp_sg) + "u" -- SERVI > SERVU _ => (dropSfx 1 imp_sg) + "u" -- SERVI > SERVU
} }
} ; } ;
in quadWeakVWorst root patt imp ; in quadWeakVWorst root vseq imp ;
} ; } ;
-- Worst case for quadWeak verb -- Worst case for quadWeak verb
quadWeakVWorst : Root -> Pattern -> (Number => Str) -> V = \root,patt,imp -> quadWeakVWorst : Root -> Vowels -> (Number => Str) -> V = \root,vseq,imp ->
let let
tbl : (VForm => Str) = table { tbl : (VForm => Str) = table {
VPerf agr => ( conjQuadWeakPerf root patt (imp ! Sg) ) ! agr ; VPerf agr => ( conjQuadWeakPerf root vseq (imp ! Sg) ) ! agr ;
VImpf agr => ( conjQuadWeakImpf (imp ! Sg) (imp ! Pl) ) ! agr ; VImpf agr => ( conjQuadWeakImpf (imp ! Sg) (imp ! Pl) ) ! agr ;
VImp n => imp ! n ; VImp n => imp ! n ;
VPresPart _ => NONEXIST ; VPresPart _ => NONEXIST ;
VPastPart _ => NONEXIST VPastPart _ => NONEXIST
} ; } ;
info : VerbInfo = mkVerbInfo (Quad QWeak) (FormI) root patt (imp ! Sg) ; info : VerbInfo = mkVerbInfo (Quad QWeak) (FormI) root vseq (imp ! Sg) ;
in lin V { in lin V {
s = stemVariantsTbl tbl ; s = stemVariantsTbl tbl ;
i = info ; i = info ;
@@ -1204,45 +1271,29 @@ resource ParadigmsMlt = open
hasCompl : Prep -> Compl = \p -> p ** { isPresent = True } ; hasCompl : Prep -> Compl = \p -> p ** { isPresent = True } ;
noCompl : Compl = noPrep ** { isPresent = False } where { noPrep : Prep = mkPrep [] }; noCompl : Compl = noPrep ** { isPresent = False } where { noPrep : Prep = mkPrep [] };
mkVS : V -> VS ; -- sentence-compl
mkVS v = lin VS v ; mkVS v = lin VS v ;
prepV2 : V -> Prep -> V2 ; prepV2 : V -> Prep -> V2 ;
prepV2 v p = lin V2 ( v ** { c2 = hasCompl p } ) ; prepV2 v p = lin V2 ( v ** { c2 = hasCompl p } ) ;
dirV2 : V -> V2 ; dirV2 : V -> V2 ;
-- dirV2 v = prepV2 v noPrep ;
dirV2 v = lin V2 ( v ** { c2 = noCompl } ) ; dirV2 v = lin V2 ( v ** { c2 = noCompl } ) ;
prepPrepV3 : V -> Prep -> Prep -> V3 ; prepPrepV3 : V -> Prep -> Prep -> V3 ;
prepPrepV3 v p t = lin V3 (v ** { c2 = hasCompl p ; c3 = hasCompl t }) ; prepPrepV3 v p t = lin V3 (v ** { c2 = hasCompl p ; c3 = hasCompl t }) ;
dirV3 : V -> Prep -> V3 ; dirV3 : V -> Prep -> V3 ;
-- dirV3 v p = prepPrepV3 v noPrep p ;
dirV3 v t = lin V3 (v ** { c2 = noCompl ; c3 = hasCompl t }) ; dirV3 v t = lin V3 (v ** { c2 = noCompl ; c3 = hasCompl t }) ;
dirdirV3 : V -> V3 ; dirdirV3 : V -> V3 ;
-- dirdirV3 v = dirV3 v noPrep ;
dirdirV3 v = lin V3 (v ** { c2 = noCompl ; c3 = noCompl }) ; dirdirV3 v = lin V3 (v ** { c2 = noCompl ; c3 = noCompl }) ;
mkV3 : overload {
mkV3 : V -> V3 ; -- ditransitive, e.g. give,_,_
mkV3 : V -> Prep -> Prep -> V3 ; -- two prepositions, e.g. speak, with, about
mkV3 : V -> Prep -> V3 ; -- give,_,to --%
-- mkV3 : V -> Str -> V3 ; -- give,_,to --%
-- mkV3 : Str -> Str -> V3 ; -- give,_,to --%
-- mkV3 : Str -> V3 ; -- give,_,_ --%
};
mkV3 = overload { mkV3 = overload {
mkV3 : V -> V3 = dirdirV3 ; mkV3 : V -> V3 = dirdirV3 ;
mkV3 : V -> Prep -> Prep -> V3 = prepPrepV3 ; mkV3 : V -> Prep -> Prep -> V3 = prepPrepV3 ;
mkV3 : V -> Prep -> V3 = dirV3 ; mkV3 : V -> Prep -> V3 = dirV3 ;
-- mkV3 : V -> Str -> V3 = \v,s -> dirV3 v (mkPrep s);
-- mkV3 : Str -> Str -> V3 = \v,s -> dirV3 (regV v) (mkPrep s);
-- mkV3 : Str -> V3 = \v -> dirdirV3 (regV v) ;
} ; } ;
mkV2V : V -> Prep -> Prep -> V2V ; -- e.g. want (noPrep NP) (to VP)
mkV2V v p t = lin V2V (v ** { c2 = hasCompl p ; c3 = hasCompl t }) ; mkV2V v p t = lin V2V (v ** { c2 = hasCompl p ; c3 = hasCompl t }) ;
{- Conjunction -------------------------------------------------------- -} {- Conjunction -------------------------------------------------------- -}
@@ -1260,10 +1311,15 @@ resource ParadigmsMlt = open
-- Overloaded function for building an adjective -- Overloaded function for building an adjective
mkA : A = overload { mkA : A = overload {
-- Same form for gender and number; no comparative form. -- Regular adjective with predictable feminine and plural forms
-- Params: -- Params:
-- Adjective, eg BLU -- Adjective, eg BRAVU
mkA : Str -> A = sameA ; mkA : Str -> A = \masc ->
let
fem = inferAdjFem masc ;
plural = inferAdjPlural fem
in
mk3A masc fem plural ;
-- Infer feminine from masculine; no comparative form. -- Infer feminine from masculine; no comparative form.
-- Params: -- Params:
@@ -1271,7 +1327,7 @@ resource ParadigmsMlt = open
-- Plural, eg SBIEĦ -- Plural, eg SBIEĦ
mkA : Str -> Str -> A = brokenA ; mkA : Str -> Str -> A = brokenA ;
-- Infer feminine from masculine; no comparative form. -- Explicit feminine form; no comparative form.
-- Params: -- Params:
-- Masculine, eg SABIĦ -- Masculine, eg SABIĦ
-- Feminine, eg SABIĦA -- Feminine, eg SABIĦA
@@ -1288,17 +1344,6 @@ resource ParadigmsMlt = open
} ; } ;
-- Regular adjective with predictable feminine and plural forms
regA : Str -> A ;
regA masc =
let
fem = determineAdjFem masc ;
plural = determineAdjPlural fem
in
mk3A masc fem plural ;
-- Adjective with same forms for masculine, feminine and plural.
sameA : Str -> A ;
sameA a = mk3A a a a ; sameA a = mk3A a a a ;
-- Adjective with predictable feminine but broken plural -- Adjective with predictable feminine but broken plural
@@ -1307,14 +1352,14 @@ resource ParadigmsMlt = open
-- without comparative form -- without comparative form
brokenA : Str -> Str -> A = \masc,plural -> brokenA : Str -> Str -> A = \masc,plural ->
let let
fem = determineAdjFem masc fem = inferAdjFem masc
in in
mk3A masc fem plural ; mk3A masc fem plural ;
-- with comparative form -- with comparative form
brokenA : Str -> Str -> Str -> A = \masc,plural,compar -> brokenA : Str -> Str -> Str -> A = \masc,plural,compar ->
let let
fem = determineAdjFem masc fem = inferAdjFem masc
in in
mk4A masc fem plural compar ; mk4A masc fem plural compar ;
@@ -1330,22 +1375,6 @@ resource ParadigmsMlt = open
mk4A = \masc,fem,plural,compar -> mk4A = \masc,fem,plural,compar ->
lin A (mkAdjective masc fem plural compar) ** {hasComp = True} ; lin A (mkAdjective masc fem plural compar) ** {hasComp = True} ;
-- Determine femininine form of adjective from masculine
determineAdjFem : Str -> Str ;
determineAdjFem masc = case masc of {
_ + "ef" => (dropSfx 2 masc) + "fa" ; -- NIEXEF
_ + "u" => (init masc) + "a" ; -- BRAVU
_ + "i" => masc + "ja" ; -- MIMLI
_ => masc + "a" -- VOJT
} ;
-- Determine plural form of adjective from feminine
determineAdjPlural : Str -> Str ;
determineAdjPlural fem = case fem of {
_ + ("f"|"j"|"ġ") + "a" => (init fem) + "in" ; -- NIEXFA, MIMLIJA, MAĦMUĠA
_ => (init fem) + "i" -- BRAVA
} ;
prepA2 : A -> Prep -> A2 ; prepA2 : A -> Prep -> A2 ;
prepA2 a p = lin A2 (a ** {c2 = hasCompl p}) ; prepA2 a p = lin A2 (a ** {c2 = hasCompl p}) ;
@@ -1353,10 +1382,6 @@ resource ParadigmsMlt = open
-- dirA2 a = prepA2 a noPrep ; -- dirA2 a = prepA2 a noPrep ;
dirA2 a = lin A2 (a ** {c2 = noCompl}) ; dirA2 a = lin A2 (a ** {c2 = noCompl}) ;
mkA2 : overload {
mkA2 : A -> Prep -> A2 ;
mkA2 : A -> Str -> A2 ;
} ;
mkA2 = overload { mkA2 = overload {
mkA2 : A -> Prep -> A2 = prepA2 ; mkA2 : A -> Prep -> A2 = prepA2 ;
mkA2 : A -> Str -> A2 = \a,p -> prepA2 a (mkPrep p) ; mkA2 : A -> Str -> A2 = \a,p -> prepA2 a (mkPrep p) ;
@@ -1365,17 +1390,10 @@ resource ParadigmsMlt = open
AS, A2S, AV : Type = A ; AS, A2S, AV : Type = A ;
A2V : Type = A2 ; A2V : Type = A2 ;
mkAS : A -> AS ;
mkAS a = a ; mkAS a = a ;
{- Adverb ------------------------------------------------------------- -} {- Adverb ------------------------------------------------------------- -}
mkAdv : Str -> Adv ; -- post-verbal adverb, e.g. ILLUM
mkAdV : Str -> AdV ; -- preverbal adverb, e.g. DEJJEM
mkAdA : Str -> AdA ; -- adverb modifying adjective, e.g. PJUTTOST
mkAdN : Str -> AdN ; -- adverb modifying numeral, e.g. MADWAR
mkAdv x = lin Adv (ss x) ** { mkAdv x = lin Adv (ss x) ** {
joinsVerb = False ; joinsVerb = False ;
a = agrP3 Sg Masc ; -- ignored when joinsVerb = False a = agrP3 Sg Masc ; -- ignored when joinsVerb = False
@@ -1400,5 +1418,4 @@ resource ParadigmsMlt = open
mkOrd : Str -> Ord = \x -> lin Ord { s = \\c => x }; mkOrd : Str -> Ord = \x -> lin Ord { s = \\c => x };
} }

View File

@@ -537,7 +537,7 @@ resource ResMlt = ParamX ** open Prelude, Predef, Maybe in {
class : VClass ; class : VClass ;
form : VDerivedForm ; form : VDerivedForm ;
root : Root ; -- radicals root : Root ; -- radicals
patt : Pattern ; -- vowels extracted from mamma vseq : Vowels ; -- vowels extracted from mamma
imp : Str ; -- Imperative Sg. Gives so much information jaħasra! imp : Str ; -- Imperative Sg. Gives so much information jaħasra!
} ; } ;
@@ -849,8 +849,8 @@ resource ResMlt = ParamX ** open Prelude, Predef, Maybe in {
<VImpf (AgP1 Pl), Pos> => "nkunu" ; <VImpf (AgP1 Pl), Pos> => "nkunu" ;
<VImpf (AgP2 Pl), Pos> => "tkunu" ; <VImpf (AgP2 Pl), Pos> => "tkunu" ;
<VImpf (AgP3Pl), Pos> => "jkunu" ; <VImpf (AgP3Pl), Pos> => "jkunu" ;
<VImp (Pl), Pos> => "kun" ; <VImp (Sg), Pos> => "kun" ;
<VImp (Sg), Pos> => "kunu" ; <VImp (Pl), Pos> => "kunu" ;
<VPerf (AgP1 Sg), Neg> => "kontx" ; <VPerf (AgP1 Sg), Neg> => "kontx" ;
<VPerf (AgP2 Sg), Neg> => "kontx" ; <VPerf (AgP2 Sg), Neg> => "kontx" ;
<VPerf (AgP3Sg Masc), Neg> => "kienx" ; <VPerf (AgP3Sg Masc), Neg> => "kienx" ;
@@ -865,8 +865,8 @@ resource ResMlt = ParamX ** open Prelude, Predef, Maybe in {
<VImpf (AgP1 Pl), Neg> => "nkunux" ; <VImpf (AgP1 Pl), Neg> => "nkunux" ;
<VImpf (AgP2 Pl), Neg> => "tkunux" ; <VImpf (AgP2 Pl), Neg> => "tkunux" ;
<VImpf (AgP3Pl), Neg> => "jkunux" ; <VImpf (AgP3Pl), Neg> => "jkunux" ;
<VImp (Pl), Neg> => "kunx" ; <VImp (Sg), Neg> => "kunx" ;
<VImp (Sg), Neg> => "kunux" ; <VImp (Pl), Neg> => "kunux" ;
<VPresPart gn, _> => NONEXIST ; <VPresPart gn, _> => NONEXIST ;
<VPastPart gn, _> => NONEXIST <VPastPart gn, _> => NONEXIST
} }
@@ -907,8 +907,8 @@ resource ResMlt = ParamX ** open Prelude, Predef, Maybe in {
VImpf (AgP1 Pl) => mkVerbStems [] "m'aħnie" ; VImpf (AgP1 Pl) => mkVerbStems [] "m'aħnie" ;
VImpf (AgP2 Pl) => mkVerbStems [] "m'intom" ; VImpf (AgP2 Pl) => mkVerbStems [] "m'intom" ;
VImpf (AgP3Pl) => mkVerbStems "huma" "m'humie" ; VImpf (AgP3Pl) => mkVerbStems "huma" "m'humie" ;
VImp (Pl) => mkVerbStems "kun" ; VImp (Sg) => mkVerbStems "kun" ;
VImp (Sg) => mkVerbStems "kunu" ; VImp (Pl) => mkVerbStems "kunu" ;
VPresPart gn => mkVerbStems NONEXIST ; VPresPart gn => mkVerbStems NONEXIST ;
VPastPart gn => mkVerbStems NONEXIST VPastPart gn => mkVerbStems NONEXIST
} ; } ;
@@ -1043,9 +1043,9 @@ resource ResMlt = ParamX ** open Prelude, Predef, Maybe in {
EorI : Str = "e" | "i" ; EorI : Str = "e" | "i" ;
IorE : Str = "i" | "e" ; IorE : Str = "i" | "e" ;
{- ~~~ Roots & Patterns ~~~ -} {- ~~~ Roots & Vowel sequences ~~~ -}
Pattern : Type = {V1, V2 : Str} ; Vowels : Type = {V1, V2 : Str} ;
Root : Type = {C1, C2, C3, C4 : Str} ; Root : Type = {C1, C2, C3, C4 : Str} ;
-- Make a root object. Accepts following overloads: -- Make a root object. Accepts following overloads:
@@ -1068,40 +1068,40 @@ resource ResMlt = ParamX ** open Prelude, Predef, Maybe in {
{ C1=toLower c1 ; C2=toLower c2 ; C3=toLower c3 ; C4=toLower c4 } ; { C1=toLower c1 ; C2=toLower c2 ; C3=toLower c3 ; C4=toLower c4 } ;
} ; } ;
mkPattern : Pattern = overload { mkVowels : Vowels = overload {
mkPattern : Pattern = mkVowels : Vowels =
{ V1=[] ; V2=[] } ; { V1=[] ; V2=[] } ;
mkPattern : Str -> Pattern = \v1 -> mkVowels : Str -> Vowels = \v1 ->
{ V1=toLower v1 ; V2=[] } ; { V1=toLower v1 ; V2=[] } ;
mkPattern : Str -> Str -> Pattern = \v1,v2 -> mkVowels : Str -> Str -> Vowels = \v1,v2 ->
{ V1=toLower v1 ; V2=case v2 of {"" => [] ; _ => toLower v2}} ; { V1=toLower v1 ; V2=case v2 of {"" => [] ; _ => toLower v2}} ;
} ; } ;
-- Extract first two vowels from a token (designed for semitic verb forms) -- Extract first two vowels from a token (designed for semitic verb forms)
--- potentially slow --- potentially slow
extractPattern : Str -> Pattern = \s -> extractVowels : Str -> Vowels = \s ->
case s of { case s of {
v1@"ie" + _ + v2@#Vowel + _ => mkPattern v1 v2 ; -- IEQAF v1@"ie" + _ + v2@#Vowel + _ => mkVowels v1 v2 ; -- IEQAF
v1@#Vowel + _ + v2@#Vowel + _ => mkPattern v1 v2 ; -- IKTEB v1@#Vowel + _ + v2@#Vowel + _ => mkVowels v1 v2 ; -- IKTEB
_ + v1@"ie" + _ + v2@#Vowel + _ => mkPattern v1 v2 ; -- RIEQED _ + v1@"ie" + _ + v2@#Vowel + _ => mkVowels v1 v2 ; -- RIEQED
_ + v1@"ie" + _ => mkPattern v1 ; -- ŻIED _ + v1@"ie" + _ => mkVowels v1 ; -- ŻIED
_ + v1@#Vowel + _ + v2@#Vowel + _ => mkPattern v1 v2 ; -- ĦARBAT _ + v1@#Vowel + _ + v2@#Vowel + _ => mkVowels v1 v2 ; -- ĦARBAT
_ + v1@#Vowel + _ => mkPattern v1 ; -- ĦOBB _ + v1@#Vowel + _ => mkVowels v1 ; -- ĦOBB
_ => mkPattern _ => mkVowels
} ; } ;
-- Create a VerbInfo record, optionally omitting various fields -- Create a VerbInfo record, optionally omitting various fields
mkVerbInfo : VerbInfo = overload { mkVerbInfo : VerbInfo = overload {
mkVerbInfo : VClass -> VDerivedForm -> VerbInfo = \c,f -> mkVerbInfo : VClass -> VDerivedForm -> VerbInfo = \c,f ->
{ class=c ; form=f ; root=mkRoot ; patt=mkPattern ; imp=[] } ; { class=c ; form=f ; root=mkRoot ; vseq=mkVowels ; imp=[] } ;
mkVerbInfo : VClass -> VDerivedForm -> Str -> VerbInfo = \c,f,i -> mkVerbInfo : VClass -> VDerivedForm -> Str -> VerbInfo = \c,f,i ->
{ class=c ; form=f ; root=mkRoot ; patt=mkPattern ; imp=i } ; { class=c ; form=f ; root=mkRoot ; vseq=mkVowels ; imp=i } ;
mkVerbInfo : VClass -> VDerivedForm -> Root -> Pattern -> VerbInfo = \c,f,r,p -> mkVerbInfo : VClass -> VDerivedForm -> Root -> Vowels -> VerbInfo = \c,f,r,p ->
{ class=c ; form=f ; root=r ; patt=p ; imp=[] } ; { class=c ; form=f ; root=r ; vseq=p ; imp=[] } ;
mkVerbInfo : VClass -> VDerivedForm -> Root -> Pattern -> Str -> VerbInfo = \c,f,r,p,i -> mkVerbInfo : VClass -> VDerivedForm -> Root -> Vowels -> Str -> VerbInfo = \c,f,r,p,i ->
{ class=c ; form=f ; root=r ; patt=p ; imp=i } ; { class=c ; form=f ; root=r ; vseq=p ; imp=i } ;
-- mkVerbInfo : VClass -> VDerivedForm -> Root -> Pattern -> Pattern -> Str -> VerbInfo = \c,f,r,p,p2,i -> -- mkVerbInfo : VClass -> VDerivedForm -> Root -> Vowels -> Vowels -> Str -> VerbInfo = \c,f,r,p,p2,i ->
-- { class=c ; form=f ; root=r ; patt=p ; patt2=p2 ; imp=i } ; -- { class=c ; form=f ; root=r ; vseq=p ; vseq2=p2 ; imp=i } ;
} ; } ;
-- Change certain fields of a VerbInfo record -- Change certain fields of a VerbInfo record
@@ -1109,18 +1109,46 @@ resource ResMlt = ParamX ** open Prelude, Predef, Maybe in {
-- Root -- Root
updateVerbInfo : VerbInfo -> Root -> VerbInfo = \i,r -> updateVerbInfo : VerbInfo -> Root -> VerbInfo = \i,r ->
{ class=i.class ; form=i.form ; root=r ; patt=i.patt ; imp=i.imp } ; { class=i.class ; form=i.form ; root=r ; vseq=i.vseq ; imp=i.imp } ;
-- DerivedForm -- DerivedForm
updateVerbInfo : VerbInfo -> VDerivedForm -> VerbInfo = \i,f -> updateVerbInfo : VerbInfo -> VDerivedForm -> VerbInfo = \i,f ->
{ class=i.class ; form=f ; root=i.root ; patt=i.patt ; imp=i.imp } ; { class=i.class ; form=f ; root=i.root ; vseq=i.vseq ; imp=i.imp } ;
-- DerivedForm, Imperative -- DerivedForm, Imperative
updateVerbInfo : VerbInfo -> VDerivedForm -> Str -> VerbInfo = \i,f,imp -> updateVerbInfo : VerbInfo -> VDerivedForm -> Str -> VerbInfo = \i,f,imp ->
{ class=i.class ; form=f ; root=i.root ; patt=i.patt ; imp=imp } ; { class=i.class ; form=f ; root=i.root ; vseq=i.vseq ; imp=imp } ;
} ; } ;
-- Return the class for a given root
classifyRoot : Root -> VClass = \r ->
case <r.C1,r.C2,r.C3,r.C4> of {
<#WeakCons, #StrongCons, #StrongCons, ""> => Weak Assimilative ;
<#StrongCons, #WeakCons, #StrongCons, ""> => Weak Hollow ;
<#StrongCons, #StrongCons, #WeakCons, ""> => Weak Lacking ;
<#StrongCons, #WeakCons, #WeakCons, ""> => Weak Lacking ;
<#Consonant, #Consonant, "għ", ""> => Weak Defective ;
<#Consonant, c2@#Consonant, c3@#Consonant, ""> =>
if_then_else VClass (pbool2bool (eqStr c2 c3))
(Strong Geminated)
(case c2 of {
#LiquidCons => Strong LiquidMedial ;
_ => Strong Regular
}) ;
<#Consonant, #Consonant, #Consonant, #WeakCons> => Quad QWeak ;
<#Consonant, #Consonant, #Consonant, #Consonant> => Quad QStrong ;
-- Irregular
<"'",_,_,_> => Irregular ;
<_,"'",_,_> => Irregular ;
<_,_,"'",_> => Irregular ;
<_,_,_,"'"> => Irregular ;
<_,_,_,""> => Predef.error("Cannot classify root:"++r.C1+"-"+r.C2+"-"+r.C3) ;
<_,_,_,_> => Predef.error("Cannot classify root:"++r.C1+"-"+r.C2+"-"+r.C3+"-"+r.C4)
} ;
{- ~~~ Useful helper functions ~~~ -} {- ~~~ Useful helper functions ~~~ -}
NONEXIST : Str = "#NONEXIST#" ; NONEXIST : Str = "#NONEXIST#" ;

View File

@@ -152,14 +152,14 @@ concrete StructuralMlt of Structural = CatMlt **
have_V2 = dirV2 (kellu_V) ; have_V2 = dirV2 (kellu_V) ;
oper oper
af_V = irregularV form1 (ResMlt.mkRoot "'-'-f") (ResMlt.mkPattern "a" []) af_V = irregularV form1 (ResMlt.mkRoot "'-'-f") (ResMlt.mkVowels "a" [])
"kont naf" "kont taf" "kien jaf" "kienet taf" "konna nafu" "kontu tafu" "kienu jafu" --- will fail for negative "kont naf" "kont taf" "kien jaf" "kienet taf" "konna nafu" "kontu tafu" "kienu jafu" --- will fail for negative
"naf" "taf" "jaf" "taf" "nafu" "tafu" "jafu" "naf" "taf" "jaf" "taf" "nafu" "tafu" "jafu"
"kun af" "kunu afu" "kun af" "kunu afu"
; ;
sata'_V = mkV "sata'" (ResMlt.mkRoot "s-t-għ") ; sata'_V = mkV "sata'" (ResMlt.mkRoot "s-t-għ") ;
ried_V = mkV "ried" (ResMlt.mkRoot "r-j-d") ; ried_V = mkV "ried" (ResMlt.mkRoot "r-j-d") ;
kellu_V = irregularV form1 (ResMlt.mkRoot) (ResMlt.mkPattern) kellu_V = irregularV form1 (ResMlt.mkRoot) (ResMlt.mkVowels)
"kelli" "kellek" "kellu" "kellha" "kellna" "kellkom" "kellhom" "kelli" "kellek" "kellu" "kellha" "kellna" "kellkom" "kellhom"
"għandi" "għandek" "għandu" "għandha" "għandna" "għandkom" "għandhom" "għandi" "għandek" "għandu" "għandha" "għandna" "għandkom" "għandhom"
"kollok" "kollkom" "kollok" "kollkom"