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

@@ -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-ġ") ;
kolja_KLJJ_1_7010_V = mkV "kolja" (mkRoot "k-l-j-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"
"nkompli" "tkompli" "jkompli" "tkompli" "nkomplu" "tkomplu" "jkomplu"
"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"
"nitkompla" "titkompla" "jitkompla" "titkompla" "nitkomplu" "titkomplu" "jitkomplu"
"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") ;
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") ;
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"
"nmantna" "tmantna" "jmantna" "tmantna" "nmantnu" "tmantnu" "jmantnu"
"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"
"nitmantna" "titmantna" "jitmantna" "titmantna" "nitmantnu" "titmantnu" "jitmantnu"
"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ħ") ;
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ħ") ;
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"
"nbleħħen" "tbleħħen" "jibleħħen" "tbleħħen" "nbleħħnu" "tbleħħnu" "jibleħħ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"
"nitbleħħen" "titbleħħen" "jitbleħħen" "titbleħħen" "nitbleħħnu" "titbleħħnu" "jitbleħħ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") ;
bierek_BRK_3_7491_V = mkV_III "bierek" (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"
"nitbrekken" "titbrekken" "jitbrekken" "titbrekken" "nitbrekknu" "titbrekknu" "jitbrekknu"
"tbrekken" "tbrekknu"
@@ -1484,7 +1484,7 @@ concrete DictMlt of DictMltAbs = CatMlt ** open ParadigmsMlt in {
gezz_GZZ_1_8120_V = mkV "ġeżż" (mkRoot "ġ-ż-ż") ;
gezzez_GZZ_2_8121_V = mkV_II "ġeżż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"
"niġi" "tiġi" "jiġi" "tiġi" "niġu" "tiġu" "jiġu"
"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") ;
kejjel_KJL_2_8670_V = mkV_II "kejjel" (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"
"niekol" "tiekol" "jiekol" "tiekol" "nieklu" "tieklu" "jieklu"
("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") ;
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") ;
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"
"nkun" "tkun" "jkun" "tkun" "nkunu" "tkunu" "jkunu"
"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") ;
mewweg_MWG_2_8916_V = mkV_II "mewweġ" (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"
"mmur" "tmur" "jmur" "tmur" "mmorru" "tmorru" "jmorru"
"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") ;
qawwa_QWJ_2_9355_V = mkV_II "qawwa" (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"
"ngħid" "tgħid" "jgħid" "tgħid" "ngħidu" "tgħidu" "jgħ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") ;
razzan_RZN_2_9511_V = mkV_II "rażż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"
"nara" "tara" "jara" "tara" "naraw" "taraw" "jaraw"
"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"
"nintwera" "tintwera" "jintwera" "tintwera" "nintwerew" "tintwerew" "jintwerew"
"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") ;
tellet_TLT_2_9907_V = mkV_II "tellet" (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"
"nitamma" "titamma" "jitamma" "titamma" "nitammaw" "titammaw" "jitammaw"
"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"
"nitama" "titama" "jitama" "titama" "nitamaw" "titamaw" "jitamaw"
"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"
"nittama" "tittama" "jittama" "tittama" "nittamaw" "tittamaw" "jittamaw"
"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") ;
twelled_WLD_5_10060_V = mkV_V "twelled" (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"
"nemmen" "temmen" "jemmen" "temmen" "nemmnu" "temmnu" "jemmnu"
"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") ;
hassel_HSL_2_10765_V = mkV_II "ħ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"
"nagħti" "tagħti" "jagħti" "tagħti" "nagħtu" "tagħtu" "jagħtu"
"agħti" "agħtu"
) ;
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"
"niddi" "tiddi" "jiddi" "tiddi" "niddu" "tiddu" "jiddu"
"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"
"nidden" "tidden" "jidden" "tidden" "niddnu" "tiddnu" "jiddnu"
"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"
"nistieden" "tistieden" "jistieden" "tistieden" "nistiednu" "tistiednu" "jistiednu"
"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
"naf" "taf" "jaf" "taf" "nafu" "tafu" "jafu"
"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"
"nintaf" "tintaf" "jintaf" "tintaf" "nintafu" "tintafu" "jintafu"
"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"
"nieħu" "tieħu" "jieħu" "tieħu" "nieħdu" "tieħdu" "jieħdu"
"ħ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"
"nittieħed" "tittieħed" "jittieħed" "tittieħed" "nittieħdu" "tittieħdu" "jittieħ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"
"nistħi" "tistħi" "jistħi" "tistħi" "nistħu" "tistħu" "jistħ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"
"namar" "tamar" "jamar" "tamar" "namraw" "tamraw" "jamraw"
"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"
"namba" "tamba" "jamba" "tamba" "nambaw" "tambaw" "jambaw"
"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"
"nistenna" "tistenna" "jistenna" "tistenna" "nistennew" "tistennew" "jistennew"
"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"
"nistienes" "tistienes" "jistienes" "tistienes" "nistiensu" "tistiensu" "jistiensu"
"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"
"niżżi" "tiżżi" "jiżżi" "tiżżi" "niżżu" "tiżżu" "jiżż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"
"nażżem" "tażżem" "jażżem" "tażżem" "nażżmu" "tażżmu" "jażż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") ;
penpen_PNPN_1_10813_V = mkV "penpen" (mkRoot "p-n-p-n") ;
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"
"nuri" "turi" "juri" "turi" "nuru" "turu" "juru"
"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"
"nintara" "tintara" "jintara" "tintara" "nintaraw" "tintaraw" "jintaraw"
"ntara" "ntaraw"

View File

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

View File

@@ -45,6 +45,54 @@ resource MorphoMlt = ResMlt ** open Prelude in {
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 ----------------------------------------------------------------- -}
oper
@@ -64,19 +112,19 @@ resource MorphoMlt = ResMlt ** open Prelude in {
-- IE/I vowel changes
-- 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}
<{C2="għ"},{V1="ie";V2="e"}> => mkPattern "e" "i" ; -- QIEGĦED > QEGĦIDKOM
<_,{V1="ie";V2="e"}> => mkPattern "i" "i" ; -- WIEĠEB > WIĠIBKOM
<_,{V1="ie";V2=""}> => mkPattern "i" ; -- STRIEĦ > STRIĦAJT
<{C2="għ"},{V1="ie";V2="e"}> => mkVowels "e" "i" ; -- QIEGĦED > QEGĦIDKOM
<_,{V1="ie";V2="e"}> => mkVowels "i" "i" ; -- WIEĠEB > WIĠIBKOM
<_,{V1="ie";V2=""}> => mkVowels "i" ; -- STRIEĦ > STRIĦAJT
_ => vowels
} ;
{- ~~~ Strong Verb ~~~ -}
-- Conjugate entire verb in PERFECT tense
-- Params: Root, Pattern
conjStrongPerf : Root -> Pattern -> (VAgr => Str) = \root,p ->
-- Params: Root, Vowels
conjStrongPerf : Root -> Vowels -> (VAgr => Str) = \root,p ->
let
ktib = root.C1 + root.C2 + (case p.V2 of {"e" => "i" ; _ => p.V2 }) + 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)
conjStrongImpf = conjGenericImpf ;
-- Conjugate entire verb in IMPERATIVE tense, infers vowel patterns
-- Params: Root, Pattern
conjStrongImp : Root -> Pattern -> (Number => Str) = \root,patt ->
-- Conjugate entire verb in IMPERATIVE tense, infers vowel sequence
-- Params: Root, Vowels
conjStrongImp : Root -> Vowels -> (Number => Str) = \root,vseq ->
let
vwls = vowelChangesStrong patt ;
vwls = vowelChangesStrong vseq ;
in
table {
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
vowelChangesStrong : Pattern -> (Number => Pattern) = \patt ->
vowelChangesStrong : Vowels -> (Number => Vowels) = \vseq ->
table {
Sg => case <patt.V1,patt.V2> of {
<"a","a"> => mkPattern "o" "o" ; -- RABAT > ORBOT (but: ILGĦAB, AĦBAT)
<"a","e"> => mkPattern "a" "e" ; -- GĦAMEL > AGĦMEL
<"e","e"> => mkPattern "i" "e" ; -- FEHEM > IFHEM
<"e","a"> => mkPattern "i" "a" ; -- FETAĦ > IFTAĦ (but: ONFOĦ)
<"i","e"> => mkPattern "i" "e" ; -- KITEB > IKTEB
<"o","o"> => mkPattern "o" "o" -- GĦOĠOB > OGĦĠOB
Sg => case <vseq.V1,vseq.V2> of {
<"a","a"> => mkVowels "o" "o" ; -- RABAT > ORBOT (but: ILGĦAB, AĦBAT)
<"a","e"> => mkVowels "a" "e" ; -- GĦAMEL > AGĦMEL
<"e","e"> => mkVowels "i" "e" ; -- FEHEM > IFHEM
<"e","a"> => mkVowels "i" "a" ; -- FETAĦ > IFTAĦ (but: ONFOĦ)
<"i","e"> => mkVowels "i" "e" ; -- KITEB > IKTEB
<"o","o"> => mkVowels "o" "o" -- GĦOĠOB > OGĦĠOB
};
Pl => case <patt.V1,patt.V2> of {
<"a","a"> => mkPattern "o" ; -- RABAT > ORBTU
<"a","e"> => mkPattern "a" ; -- GĦAMEL > AGĦMLU
<"e","e"> => mkPattern "i" ; -- FEHEM > IFHMU
<"e","a"> => mkPattern "i" ; -- FETAĦ > IFTĦU
<"i","e"> => mkPattern "i" ; -- KITEB > IKTBU
<"o","o"> => mkPattern "o" -- GĦOĠOB > OGĦĠBU
Pl => case <vseq.V1,vseq.V2> of {
<"a","a"> => mkVowels "o" ; -- RABAT > ORBTU
<"a","e"> => mkVowels "a" ; -- GĦAMEL > AGĦMLU
<"e","e"> => mkVowels "i" ; -- FEHEM > IFHMU
<"e","a"> => mkVowels "i" ; -- FETAĦ > IFTĦU
<"i","e"> => mkVowels "i" ; -- KITEB > IKTBU
<"o","o"> => mkVowels "o" -- GĦOĠOB > OGĦĠBU
}
} ;
{- ~~~ Liquid-Medial Verb ~~~ -}
-- Conjugate entire verb in PERFECT tense
-- Params: Root, Pattern
conjLiquidMedialPerf : Root -> Pattern -> (VAgr => Str) = \root,patt ->
-- Params: Root, Vowels
conjLiquidMedialPerf : Root -> Vowels -> (VAgr => Str) = \root,vseq ->
let
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-
_ => root.C1 + root.C2 + (case patt.V2 of {"e" => "i" ; _ => patt.V2 }) + root.C3 -- ŻLAQ-
"għ" => root.C1 + vseq.V1 + root.C2 + (case vseq.V2 of {"e" => "i" ; _ => vseq.V2 }) + root.C3 ; -- GĦAMIL-
_ => 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
table {
AgP1 Sg => zlaq + "t" ; -- Jiena ŻLAQT
AgP2 Sg => zlaq + "t" ; -- Inti ŻLAQT
AgP3Sg Masc=> root.C1 + patt.V1 + root.C2 + patt.V2 + root.C3 ; -- Huwa ŻELAQ
AgP3Sg Fem => zelq + (case patt.V2 of {"o" => "o" ; _ => "e"}) + "t" ; -- Hija ŻELQET
AgP3Sg Masc=> root.C1 + vseq.V1 + root.C2 + vseq.V2 + root.C3 ; -- Huwa ŻELAQ
AgP3Sg Fem => zelq + (case vseq.V2 of {"o" => "o" ; _ => "e"}) + "t" ; -- Hija ŻELQET
AgP1 Pl => zlaq + "na" ; -- Aħna ŻLAQNA
AgP2 Pl => zlaq + "tu" ; -- Intom ŻLAQTU
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)
conjLiquidMedialImpf = conjGenericImpf ;
-- Conjugate entire verb in IMPERATIVE tense, infers vowel patterns
-- Params: Root, Pattern
conjLiquidMedialImp : Root -> Pattern -> (Number => Str) = \root,patt ->
-- Conjugate entire verb in IMPERATIVE tense, infers vowel sequence
-- Params: Root, Vowels
conjLiquidMedialImp : Root -> Vowels -> (Number => Str) = \root,vseq ->
let
vwls = vowelChangesLiquidMedial patt ;
vwls = vowelChangesLiquidMedial vseq ;
in
table {
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
vowelChangesLiquidMedial : Pattern -> (Number => Pattern) = \patt ->
vowelChangesLiquidMedial : Vowels -> (Number => Vowels) = \vseq ->
table {
Sg => case <patt.V1,patt.V2> of {
<"a","a"> => mkPattern "i" "o" ; -- TALAB > ITLOB but ĦARAQ > AĦRAQ
<"a","e"> => mkPattern "o" "o" ; -- ĦAREĠ > OĦROĠ
<"e","e"> => mkPattern "e" "e" ; -- ĦELES > EĦLES
<"e","a"> => mkPattern "i" "o" ; -- ŻELAQ > IŻLOQ
<"i","e"> => mkPattern "i" "e" ; -- DILEK > IDLEK
<"o","o"> => mkPattern "i" "o" -- XOROB > IXROB
Sg => case <vseq.V1,vseq.V2> of {
<"a","a"> => mkVowels "i" "o" ; -- TALAB > ITLOB but ĦARAQ > AĦRAQ
<"a","e"> => mkVowels "o" "o" ; -- ĦAREĠ > OĦROĠ
<"e","e"> => mkVowels "e" "e" ; -- ĦELES > EĦLES
<"e","a"> => mkVowels "i" "o" ; -- ŻELAQ > IŻLOQ
<"i","e"> => mkVowels "i" "e" ; -- DILEK > IDLEK
<"o","o"> => mkVowels "i" "o" -- XOROB > IXROB
};
Pl => case <patt.V1,patt.V2> of {
<"a","a"> => mkPattern "i" "o" ; -- TALAB > ITOLBU
<"a","e"> => mkPattern "o" "o" ; -- ĦAREĠ > OĦORĠU
<"e","e"> => mkPattern "e" "i" ; -- ĦELES > EĦILSU
<"e","a"> => mkPattern "i" "o" ; -- ŻELAQ > IŻOLQU
<"i","e"> => mkPattern "i" "i" ; -- DILEK > IDILKU
<"o","o"> => mkPattern "i" "o" -- XOROB > IXORBU
Pl => case <vseq.V1,vseq.V2> of {
<"a","a"> => mkVowels "i" "o" ; -- TALAB > ITOLBU
<"a","e"> => mkVowels "o" "o" ; -- ĦAREĠ > OĦORĠU
<"e","e"> => mkVowels "e" "i" ; -- ĦELES > EĦILSU
<"e","a"> => mkVowels "i" "o" ; -- ŻELAQ > IŻOLQU
<"i","e"> => mkVowels "i" "i" ; -- DILEK > IDILKU
<"o","o"> => mkVowels "i" "o" -- XOROB > IXORBU
}
} ;
{- ~~~ Geminated Verb ~~~ -}
-- Conjugate entire verb in PERFECT tense
-- Params: Root, Pattern
conjGeminatedPerf : Root -> Pattern -> (VAgr => Str) = \root,patt ->
-- Params: Root, Vowels
conjGeminatedPerf : Root -> Vowels -> (VAgr => Str) = \root,vseq ->
let
habb = root.C1 + patt.V1 + root.C2 + root.C3 ;
habb = root.C1 + vseq.V1 + root.C2 + root.C3 ;
in
table {
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)
conjGeminatedImpf = conjGenericImpf ;
-- Conjugate entire verb in IMPERATIVE tense, infers vowel patterns
-- Params: Root, Pattern
conjGeminatedImp : Root -> Pattern -> (Number => Str) = \root,patt ->
-- Conjugate entire verb in IMPERATIVE tense, infers vowel sequence
-- Params: Root, Vowels
conjGeminatedImp : Root -> Vowels -> (Number => Str) = \root,vseq ->
let
vwls = vowelChangesGeminated patt ;
vwls = vowelChangesGeminated vseq ;
stem_sg = root.C1 + (vwls!Sg).V1 + root.C2 + root.C3 ;
in
table {
@@ -220,30 +268,30 @@ resource MorphoMlt = ResMlt ** open Prelude in {
} ;
-- Vowel changes for imperative
vowelChangesGeminated : Pattern -> (Number => Pattern) = \patt ->
\\n => case patt.V1 of {
"e" => mkPattern "e" ; -- BEXX > BEXX (?)
_ => mkPattern "o" -- ĦABB > ĦOBB
vowelChangesGeminated : Vowels -> (Number => Vowels) = \vseq ->
\\n => case vseq.V1 of {
"e" => mkVowels "e" ; -- BEXX > BEXX (?)
_ => mkVowels "o" -- ĦABB > ĦOBB
} ;
{- ~~~ Assimilative Verb ~~~ -}
-- Conjugate entire verb in PERFECT tense
-- Params: Root, Pattern
conjAssimilativePerf : Root -> Pattern -> (VAgr => Str) = \root,patt ->
-- Params: Root, Vowels
conjAssimilativePerf : Root -> Vowels -> (VAgr => Str) = \root,vseq ->
let
wasal = case root.C3 of {
"għ" => root.C1 + patt.V1 + root.C2 + patt.V2 + "j" ;
_ => root.C1 + patt.V1 + root.C2 + patt.V2 + root.C3
"għ" => root.C1 + vseq.V1 + root.C2 + vseq.V2 + "j" ;
_ => 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
table {
AgP1 Sg => wasal + "t" ; -- Jiena WASALT
AgP2 Sg => wasal + "t" ; -- Inti WASALT
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
} ;
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)
conjAssimilativeImpf = conjGenericImpf ;
-- Conjugate entire verb in IMPERATIVE tense, infers vowel patterns
-- Params: Root, Pattern
conjAssimilativeImp : Root -> Pattern -> (Number => Str) = \root,patt ->
-- Conjugate entire verb in IMPERATIVE tense, infers vowel sequence
-- Params: Root, Vowels
conjAssimilativeImp : Root -> Vowels -> (Number => Str) = \root,vseq ->
table {
Sg => patt.V1 + root.C2 + patt.V2 + case root.C3 of { "għ" => "'" ; _ => root.C3 } ; -- Inti: ASAL
Pl => patt.V1 + root.C2 + root.C3 + "u" -- Intom: ASLU
Sg => vseq.V1 + root.C2 + vseq.V2 + case root.C3 of { "għ" => "'" ; _ => root.C3 } ; -- Inti: ASAL
Pl => vseq.V1 + root.C2 + root.C3 + "u" -- Intom: ASLU
} ;
{- ~~~ Hollow Verb ~~~ -}
-- Conjugate entire verb in PERFECT tense
-- Params: Root, Pattern
-- Params: Root, Vowels
-- 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
sar = root.C1 + patt.V1 + root.C3 ;
sir = case <patt.V1,root.C2> of {
sar = root.C1 + vseq.V1 + root.C3 ;
sir = case <vseq.V1,root.C2> of {
<"a","w"> => root.C1 + "o" + root.C3 ; -- DAM, FAR, SAQ (most common case)
_ => root.C1 + "i" + root.C3
}
@@ -300,18 +348,18 @@ resource MorphoMlt = ResMlt ** open Prelude in {
AgP3Pl => pfx_J imp_pl -- Huma JDUMU / JMORRU
} ;
-- Conjugate entire verb in IMPERATIVE tense, infers vowel patterns
-- Params: Root, Pattern
-- Conjugate entire verb in IMPERATIVE tense, infers vowel sequence
-- Params: Root, Vowels
-- 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
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","j"> => root.C1 + "i" + root.C3 ; -- ĠAB, SAB, TAR
<"ie","j"> => root.C1 + "i" + root.C3 ; -- FIEQ, RIED, ŻIED
<"ie","w"> => root.C1 + "u" + root.C3 ; -- MIET
<"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
table {
@@ -322,23 +370,23 @@ resource MorphoMlt = ResMlt ** open Prelude in {
{- ~~~ Lacking Verb ~~~ -}
-- Conjugate entire verb in PERFECT tense
-- Params: Root, Pattern
conjLackingPerf : Root -> Pattern -> (VAgr => Str) = \root,patt ->
-- Params: Root, Vowels
conjLackingPerf : Root -> Vowels -> (VAgr => Str) = \root,vseq ->
let
mxej = root.C1 + root.C2 + patt.V1 + root.C3
mxej = root.C1 + root.C2 + vseq.V1 + root.C3
in
table {
--- i tal-leħen needs to be added here!
AgP1 Sg => mxej + "t" ; -- Jiena IMXEJT
AgP2 Sg => mxej + "t" ; -- Inti IMXEJT
AgP3Sg Masc=> root.C1 + patt.V1 + root.C2 + patt.V2 ; -- Huwa MEXA
AgP3Sg Fem => case patt.V1 of {
AgP3Sg Masc=> root.C1 + vseq.V1 + root.C2 + vseq.V2 ; -- Huwa MEXA
AgP3Sg Fem => case vseq.V1 of {
"a" => root.C1 + root.C2 + "at" ; -- Hija QRAT
_ => root.C1 + root.C2 + "iet" -- Hija MXIET
} ;
AgP1 Pl => mxej + "na" ; -- Aħna IMXEJNA
AgP2 Pl => mxej + "tu" ; -- Intom IMXEJTU
AgP3Pl => case patt.V1 of {
AgP3Pl => case vseq.V1 of {
"a" => root.C1 + root.C2 + "aw" ; -- Huma QRAW
_ => 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)
conjLackingImpf = conjGenericImpf ;
-- Conjugate entire verb in IMPERATIVE tense, infers vowel patterns
-- Params: Root, Pattern
conjLackingImp : Root -> Pattern -> (Number => Str) = \root,patt ->
-- Conjugate entire verb in IMPERATIVE tense, infers vowel sequence
-- Params: Root, Vowels
conjLackingImp : Root -> Vowels -> (Number => Str) = \root,vseq ->
table {
Sg => "i" + root.C1 + root.C2 + "i" ; -- Inti: IMXI
Pl => "i" + root.C1 + root.C2 + "u" -- Intom: IMXU
@@ -359,17 +407,17 @@ resource MorphoMlt = ResMlt ** open Prelude in {
{- ~~~ Defective Verb ~~~ -}
-- Conjugate entire verb in PERFECT tense
-- Params: Root, Pattern
conjDefectivePerf : Root -> Pattern -> ( VAgr => Str ) = \root,patt ->
-- Params: Root, Vowels
conjDefectivePerf : Root -> Vowels -> ( VAgr => Str ) = \root,vseq ->
let
qlaj = root.C1 + root.C2 + (case patt.V2 of {"e" => "i" ; _ => patt.V2 }) + "j" ;
qalgh = root.C1 + patt.V1 + root.C2 + root.C3 ;
qlaj = root.C1 + root.C2 + (case vseq.V2 of {"e" => "i" ; _ => vseq.V2 }) + "j" ;
qalgh = root.C1 + vseq.V1 + root.C2 + root.C3 ;
in
table {
AgP1 Sg => qlaj + "t" ; -- Jiena QLAJT
AgP2 Sg => qlaj + "t" ; -- Inti QLAJT
AgP3Sg Masc=> root.C1 + patt.V1 + root.C2 + patt.V2 + "'" ; -- Huwa QALA'
AgP3Sg Fem => qalgh + (case patt.V2 of {"o" => "o" ; _ => "e"}) + "t" ; -- Hija QALGĦET
AgP3Sg Masc=> root.C1 + vseq.V1 + root.C2 + vseq.V2 + "'" ; -- Huwa QALA'
AgP3Sg Fem => qalgh + (case vseq.V2 of {"o" => "o" ; _ => "e"}) + "t" ; -- Hija QALGĦET
AgP1 Pl => qlaj + "na" ; -- Aħna QLAJNA
AgP2 Pl => qlaj + "tu" ; -- Intom QLAJTU
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)
conjDefectiveImpf = conjGenericImpf ;
-- Conjugate entire verb in IMPERATIVE tense, infers vowel patterns
-- Params: Root, Pattern
conjDefectiveImp : Root -> Pattern -> ( Number => Str ) = \root,patt ->
-- Conjugate entire verb in IMPERATIVE tense, infers vowel sequence
-- Params: Root, Vowels
conjDefectiveImp : Root -> Vowels -> ( Number => Str ) = \root,vseq ->
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)
in
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
} ;
{- ~~~ Quadriliteral Verb (Strong) ~~~ -}
-- Conjugate entire verb in PERFECT tense
-- Params: Root, Pattern
conjQuadPerf : Root -> Pattern -> (VAgr => Str) = \root,patt ->
-- Params: Root, Vowels
conjQuadPerf : Root -> Vowels -> (VAgr => Str) = \root,vseq ->
let
dendil = root.C1 + patt.V1 + root.C2 + root.C3 + (case patt.V2 of {"e" => "i" ; _ => patt.V2 }) + root.C4 ;
dendl = root.C1 + patt.V1 + root.C2 + root.C3 + root.C4 ;
dendil = root.C1 + vseq.V1 + root.C2 + root.C3 + (case vseq.V2 of {"e" => "i" ; _ => vseq.V2 }) + root.C4 ;
dendl = root.C1 + vseq.V1 + root.C2 + root.C3 + root.C4 ;
in
table {
AgP1 Sg => dendil + "t" ; -- Jiena DENDILT
AgP2 Sg => dendil + "t" ; -- Inti DENDILT
AgP3Sg Masc=> root.C1 + patt.V1 + root.C2 + root.C3 + patt.V2 + root.C4 ; -- Huwa DENDIL
AgP3Sg Fem => dendl + (case patt.V2 of {"o" => "o" ; _ => "e"}) + "t" ; -- Hija DENDLET
AgP3Sg Masc=> root.C1 + vseq.V1 + root.C2 + root.C3 + vseq.V2 + root.C4 ; -- Huwa DENDIL
AgP3Sg Fem => dendl + (case vseq.V2 of {"o" => "o" ; _ => "e"}) + "t" ; -- Hija DENDLET
AgP1 Pl => dendil + "na" ; -- Aħna DENDILNA
AgP2 Pl => dendil + "tu" ; -- Intom DENDILTU
AgP3Pl => dendl + "u" -- Huma DENDLU
@@ -423,19 +471,19 @@ resource MorphoMlt = ResMlt ** open Prelude in {
AgP3Pl => pfx_J imp_pl -- Huma JDENDLU
} ;
-- Conjugate entire verb in IMPERATIVE tense, infers vowel patterns
-- Params: Root, Pattern
conjQuadImp : Root -> Pattern -> (Number => Str) = \root,patt ->
-- Conjugate entire verb in IMPERATIVE tense, infers vowel sequence
-- Params: Root, Vowels
conjQuadImp : Root -> Vowels -> (Number => Str) = \root,vseq ->
table {
Sg => root.C1 + patt.V1 + root.C2 + root.C3 + patt.V2 + root.C4 ; -- Inti: DENDEL
Pl => root.C1 + patt.V1 + root.C2 + root.C3 + root.C4 + "u" -- Intom: DENDLU
Sg => root.C1 + vseq.V1 + root.C2 + root.C3 + vseq.V2 + root.C4 ; -- Inti: DENDEL
Pl => root.C1 + vseq.V1 + root.C2 + root.C3 + root.C4 + "u" -- Intom: DENDLU
} ;
{- ~~~ Quadriliteral Verb (Weak Final) ~~~ -}
-- Conjugate entire verb in PERFECT tense
-- 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 {
"a" => -- KANTA
let
@@ -452,13 +500,13 @@ resource MorphoMlt = ResMlt ** open Prelude in {
} ;
_ => -- SERVI
let
serve = root.C1 + patt.V1 + root.C2 + root.C3 + "e" ;
serve = root.C1 + vseq.V1 + root.C2 + root.C3 + "e" ;
in
table {
AgP1 Sg => serve + "jt" ; -- Jiena SERVEJT
AgP2 Sg => serve + "jt" ; -- Inti SERVEJT
AgP3Sg Masc=> root.C1 + patt.V1 + root.C2 + root.C3 + patt.V2 ; -- Huwa SERVA
AgP3Sg Fem => root.C1 + patt.V1 + root.C2 + root.C3 + "iet" ; -- Hija SERVIET
AgP3Sg Masc=> root.C1 + vseq.V1 + root.C2 + root.C3 + vseq.V2 ; -- Huwa SERVA
AgP3Sg Fem => root.C1 + vseq.V1 + root.C2 + root.C3 + "iet" ; -- Hija SERVIET
AgP1 Pl => serve + "jna" ; -- Aħna SERVEJNA
AgP2 Pl => serve + "jtu" ; -- Intom SERVEJTU
AgP3Pl => serve + "w" -- Huma SERVEW
@@ -478,13 +526,13 @@ resource MorphoMlt = ResMlt ** open Prelude in {
AgP3Pl => pfx_J imp_pl -- Huma JSERVU
} ;
-- Conjugate entire verb in IMPERATIVE tense, infers vowel patterns
-- Params: Root, Pattern
conjQuadWeakImp : Root -> Pattern -> (Number => Str) = \root,patt ->
-- Conjugate entire verb in IMPERATIVE tense, infers vowel sequence
-- Params: Root, Vowels
conjQuadWeakImp : Root -> Vowels -> (Number => Str) = \root,vseq ->
table {
--- 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
Pl => root.C1 + patt.V1 + root.C2 + root.C3 + "u" -- Intom: SERVU
Sg => root.C1 + vseq.V1 + root.C2 + root.C3 + "i" ; -- Inti: SERVI
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
-- Params: Root, Pattern
-- Params: Root, Vowels
conjLoanImp : Str -> (Number => Str) = \mamma ->
table {
Sg => case mamma of {
@@ -560,37 +608,37 @@ resource MorphoMlt = ResMlt ** open Prelude in {
conjFormII : VerbInfo -> (VForm => Str) = \i ->
let
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 Lacking => i.root.C1 + i.patt.V1 + i.root.C2 + i.root.C2 + i.patt.V2 ; -- NEĦĦA
_ => i.root.C1 + i.patt.V1 + i.root.C2 + i.root.C2 + i.patt.V2 + i.root.C3 -- WAQQAF
Weak Defective => i.root.C1 + i.vseq.V1 + i.root.C2 + i.root.C2 + i.vseq.V2 + "'" ; -- QATTA'
Weak Lacking => i.root.C1 + i.vseq.V1 + i.root.C2 + i.root.C2 + i.vseq.V2 ; -- NEĦĦA
_ => 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 {
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
} ;
bexxix : Str = case <i.class,i.patt.V1,i.patt.V2> of {
<Weak Defective,_,_> => i.root.C1 + i.patt.V1 + i.root.C2 + i.root.C2 + i.patt.V2 + "j" ; -- QATTAJ
<_,"e","a"> => i.root.C1 + i.patt.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 ;
bexxix : Str = case <i.class,i.vseq.V1,i.vseq.V2> of {
<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.vseq.V1 + i.root.C2 + i.root.C2 + "e" + i.root.C3 ; -- NEĦĦEJ
<_,_,"e"> => i.root.C1 + i.vseq.V1 + i.root.C2 + i.root.C2 + "i" + i.root.C3 ;
_ => nehhi -- no change
} ;
waqqf : Str = case i.class of {
Weak Hollow => i.root.C1 + i.patt.V1 + i.root.C2 + i.root.C3 ; -- QAJM
Weak Lacking => i.root.C1 + i.patt.V1 + i.root.C2 + i.root.C2 ; -- NEĦĦ
_ => sfx (i.root.C1 + i.patt.V1 + i.root.C2 + i.root.C2) i.root.C3
Weak Hollow => i.root.C1 + i.vseq.V1 + i.root.C2 + i.root.C3 ; -- QAJM
Weak Lacking => i.root.C1 + i.vseq.V1 + i.root.C2 + i.root.C2 ; -- NEĦĦ
_ => sfx (i.root.C1 + i.vseq.V1 + i.root.C2 + i.root.C2) i.root.C3
} ;
waqqfu : Str = waqqf + "u" ;
perf : VAgr => Str = table {
AgP1 Sg => bexxix + "t" ;
AgP2 Sg => bexxix + "t" ;
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
_ => waqqf + "et"
} ;
AgP1 Pl => bexxix + "na" ;
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
_ => waqqf + "u"
}
@@ -618,23 +666,23 @@ resource MorphoMlt = ResMlt ** open Prelude in {
conjFormII_quad : VerbInfo -> (VForm => Str) = \i ->
let
vowels = extractPattern i.imp ;
vowels = extractVowels i.imp ;
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
_ => pfx_T i.root.C1 + i.patt.V1 + i.root.C2 + i.root.C3 + i.patt.V2 + i.root.C4 -- T-ĦARBAT
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.vseq.V1 + i.root.C2 + i.root.C3 + i.vseq.V2 + i.root.C4 -- T-ĦARBAT
} ;
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 {
Quad QWeak => pfx_T i.root.C1 + i.patt.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
Quad QWeak => pfx_T i.root.C1 + i.vseq.V1 + i.root.C2 + i.root.C3 ; -- SSERV
_ => pfx_T i.root.C1 + i.vseq.V1 + i.root.C2 + i.root.C3 + i.root.C4
} ;
perf : VAgr => Str =
let
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,"a"> => pfx_T i.root.C1 + i.patt.V1 + i.root.C2 + i.root.C3 + "a" + i.root.C4 ; -- TKANTAJ
<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.vseq.V1 + i.root.C2 + i.root.C3 + "a" + i.root.C4 ; -- TKANTAJ
_ => mamma
} ;
tharbtu : Str = case <i.class, vowels.V2> of {
@@ -707,13 +755,13 @@ resource MorphoMlt = ResMlt ** open Prelude in {
conjFormIII : VerbInfo -> (VForm => Str) = \i ->
let
wiegeb : Str = i.root.C1 + i.patt.V1 + i.root.C2 + i.patt.V2 + i.root.C3 ;
wegib : Str = case <i.patt.V1,i.patt.V2> of {
wiegeb : Str = i.root.C1 + i.vseq.V1 + i.root.C2 + i.vseq.V2 + i.root.C3 ;
wegib : Str = case <i.vseq.V1,i.vseq.V2> of {
<"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 ;
_ => 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" ;
perf : VAgr => Str = table {
AgP1 Sg => wegib + "t" ;
@@ -751,13 +799,13 @@ resource MorphoMlt = ResMlt ** open Prelude in {
conjFormVII : VerbInfo -> Str -> (VForm => Str) = \i,C1 ->
let
nhasel : Str = case i.class of {
Weak Hollow => C1 + i.patt.V1 + i.root.C3 ;
Weak Lacking => C1 + i.patt.V1 + i.root.C2 + i.patt.V2 ;
Weak Defective => C1 + i.patt.V1 + i.root.C2 + i.patt.V2 + "'" ;
_ => C1 + i.patt.V1 + i.root.C2 + i.patt.V2 + i.root.C3
Weak Hollow => C1 + i.vseq.V1 + i.root.C3 ;
Weak Lacking => C1 + i.vseq.V1 + i.root.C2 + i.vseq.V2 ;
Weak Defective => C1 + i.vseq.V1 + i.root.C2 + i.vseq.V2 + "'" ;
_ => C1 + i.vseq.V1 + i.root.C2 + i.vseq.V2 + i.root.C3
} ;
v1 : Str = case i.patt.V1 of { "ie" => "e" ; v => v } ;
v2 : Str = case i.patt.V2 of { "e" => "i" ; v => v } ;
v1 : Str = case i.vseq.V1 of { "ie" => "e" ; v => v } ;
v2 : Str = case i.vseq.V2 of { "e" => "i" ; v => v } ;
-- nhsil : Str = case <i.class,i.root.C1> of {
-- <Strong Regular,_> => C1 + 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
} ;
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 ;
_ => 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 {
Weak Lacking => nhasl + "ew" ;

View File

@@ -55,38 +55,134 @@ resource ParadigmsMlt = open
loan = Loan ;
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 --------------------------------------------------------------- -}
-- 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)
mkN : N = overload {
mkN = overload {
-- 1: Take the singular and infer plural
mkN : Str -> N = \sing ->
@@ -224,8 +320,7 @@ resource ParadigmsMlt = open
mkN3 = \n,p,q -> lin N3 (n ** {c2 = hasCompl p ; c3 = hasCompl q}) ;
-- Mark a noun as taking possessive enclitic pronouns
possN : N -> N ;
possN = \n -> lin N {
possN : N -> N = \n -> lin N {
s = n.s ;
g = n.g ;
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 ;
} ;
-- Re-export ResMlt.mkPattern
mkPattern : Pattern = overload {
mkPattern : Pattern = ResMlt.mkPattern ;
mkPattern : Str -> Pattern = \s0 -> ResMlt.mkPattern s0 ;
mkPattern : Str -> Str -> Pattern = \s0,s1 -> ResMlt.mkPattern 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)
-- Re-export ResMlt.mkVowels
mkVowels : Vowels = overload {
mkVowels : Vowels = ResMlt.mkVowels ;
mkVowels : Str -> Vowels = \s0 -> ResMlt.mkVowels s0 ;
mkVowels : Str -> Str -> Vowels = \s0,s1 -> ResMlt.mkVowels s0 s1 ;
} ;
-- Smart paradigm for building a verb
@@ -423,47 +490,47 @@ resource ParadigmsMlt = open
mkV : Str -> Root -> V = \mamma,root ->
let
class : VClass = classifyRoot root ;
patt : Pattern = extractPattern mamma ;
vseq : Vowels = extractVowels mamma ;
in
case class of {
Strong Regular => strongV root patt ;
Strong LiquidMedial => liquidMedialV root patt ;
Strong Geminated => geminatedV root patt ;
Weak Assimilative => assimilativeV root patt ;
Weak Hollow => hollowV root patt ;
Weak Lacking => lackingV root patt ;
Weak Defective => defectiveV root patt ;
Quad QStrong => quadV root patt ;
Quad QWeak => quadWeakV root patt ;
Strong Regular => strongV root vseq ;
Strong LiquidMedial => liquidMedialV root vseq ;
Strong Geminated => geminatedV root vseq ;
Weak Assimilative => assimilativeV root vseq ;
Weak Hollow => hollowV root vseq ;
Weak Lacking => lackingV root vseq ;
Weak Defective => defectiveV root vseq ;
Quad QStrong => quadV root vseq ;
Quad QWeak => quadWeakV root vseq ;
Irregular => Predef.error("Cannot use smart paradigm for irregular verb:"++mamma) ;
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
mkV : Str -> Str -> Root -> V = \mamma,imp_sg,root ->
let
class : VClass = classifyRoot root ;
patt : Pattern = extractPattern mamma ;
vseq : Vowels = extractVowels mamma ;
in
case class of {
Strong Regular => strongV root patt imp_sg ;
Strong LiquidMedial => liquidMedialV root patt imp_sg ;
Strong Geminated => geminatedV root patt imp_sg ;
Weak Assimilative => assimilativeV root patt imp_sg ;
Weak Hollow => hollowV root patt imp_sg ;
Weak Lacking => lackingV root patt imp_sg ;
Weak Defective => defectiveV root patt imp_sg ;
Quad QStrong => quadV root patt imp_sg ;
Quad QWeak => quadWeakV root patt imp_sg ;
Strong Regular => strongV root vseq imp_sg ;
Strong LiquidMedial => liquidMedialV root vseq imp_sg ;
Strong Geminated => geminatedV root vseq imp_sg ;
Weak Assimilative => assimilativeV root vseq imp_sg ;
Weak Hollow => hollowV root vseq imp_sg ;
Weak Lacking => lackingV root vseq imp_sg ;
Weak Defective => defectiveV root vseq imp_sg ;
Quad QStrong => quadV root vseq imp_sg ;
Quad QWeak => quadWeakV root vseq imp_sg ;
Irregular => Predef.error("Cannot use smart paradigm for irregular verb:"++mamma) ;
Loan => loanV mamma
} ;
-- 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 : VClass -> VDerivedForm -> Root -> Pattern -> (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_ : Str) -> V =
\class, form, root, patt,
-- 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 -> Vowels -> (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_ : Str) -> V =
\class, form, root, vseq,
perfP1Sg, perfP2Sg, perfP3SgMasc, perfP3SgFem, perfP1Pl, perfP2Pl, perfP3Pl,
impfP1Sg, impfP2Sg, impfP3SgMasc, impfP3SgFem, impfP1Pl, impfP2Pl, impfP3Pl,
impSg, impPl ->
@@ -488,7 +555,7 @@ resource ParadigmsMlt = open
VPresPart _ => NONEXIST ;
VPastPart _ => NONEXIST
} ;
info : VerbInfo = mkVerbInfo class form root patt impSg ;
info : VerbInfo = mkVerbInfo class form root vseq impSg ;
in lin V {
s = stemVariantsTbl tbl ;
i = info ;
@@ -532,12 +599,12 @@ resource ParadigmsMlt = open
derivedV_TriII : Str -> Root -> V = \mammaII, root ->
let
class : VClass = classifyRoot root ;
patt : Pattern = extractPattern mammaII ;
vseq : Vowels = extractVowels mammaII ;
imp : Str = case mammaII of {
nehh + "a" => nehh + "i" ; --- maybe too generic?
_ => 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 {
s = stemVariantsTbl (conjFormII newinfo) ;
i = newinfo ;
@@ -550,9 +617,9 @@ resource ParadigmsMlt = open
derivedV_QuadII : Str -> Root -> V = \mammaII, root ->
let
class : VClass = classifyRoot root ;
patt : Pattern = extractPattern mammaII ;
vseq : Vowels = extractVowels mammaII ;
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 {
s = stemVariantsTbl (conjFormII_quad newinfo) ;
i = newinfo ;
@@ -562,8 +629,8 @@ resource ParadigmsMlt = open
derivedV_QuadII : Str -> Str -> Root -> V = \mammaII, imp, root ->
let
class : VClass = classifyRoot root ;
patt : Pattern = extractPattern mammaII ;
newinfo : VerbInfo = mkVerbInfo class FormII root patt imp ;
vseq : Vowels = extractVowels mammaII ;
newinfo : VerbInfo = mkVerbInfo class FormII root vseq imp ;
in lin V {
s = stemVariantsTbl (conjFormII_quad newinfo) ;
i = newinfo ;
@@ -576,9 +643,9 @@ resource ParadigmsMlt = open
-- e.g.: derivedV_III "qiegħed" (mkRoot "q-għ-d")
derivedV_III : Str -> Root -> V = \mammaIII, root ->
let
patt : Pattern = extractPattern mammaIII ;
vseq : Vowels = extractVowels mammaIII ;
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 {
s = stemVariantsTbl (conjFormIII info) ;
i = info ;
@@ -596,7 +663,7 @@ resource ParadigmsMlt = open
-- use the Form II conjugation, just prefixing a T
mammaII : Str = dropPfx 1 mammaV ; -- WAQQAF
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 ;
tbl : VForm => Str = table {
VPerf agr => pfx_T (get (VPerf agr)) ;
@@ -652,7 +719,7 @@ resource ParadigmsMlt = open
derivedV_VII : Str -> Str -> Root -> V = \mammaI, mammaVII, root ->
let
class : VClass = classifyRoot root ;
vowels : Pattern = extractPattern mammaI ;
vowels : Vowels = extractVowels mammaI ;
c1 : Str = case mammaVII of {
"n" + c@#Cns + "t" + _ => "n"+c+"t" ; -- NXT-EĦET
"ntgħ" + _ => "ntgħ" ; -- NTGĦ-AĠEN
@@ -675,7 +742,7 @@ resource ParadigmsMlt = open
let
mammaI : Str = delCharAt 1 mammaVIII ;
class : VClass = classifyRoot root ;
vowels : Pattern = extractPattern mammaI ;
vowels : Vowels = extractVowels mammaI ;
info : VerbInfo = mkVerbInfo class FormVIII root vowels mammaVIII ;
c1 : Str = root.C1+"t";
in lin V {
@@ -686,15 +753,15 @@ resource ParadigmsMlt = open
} ;
-- 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 ->
case mammaIX of {
-- c1@#Consonant + c2@#Consonant + v1@("ie"|"a") + c3@#Consonant =>
_ + v1@("ie"|"a"|"â") + _ =>
let
patt : Pattern = mkPattern v1 ;
vseq : Vowels = mkVowels v1 ;
class : VClass = classifyRoot root ;
info : VerbInfo = mkVerbInfo class FormIX root patt mammaIX ;
info : VerbInfo = mkVerbInfo class FormIX root vseq mammaIX ;
in lin V {
s = stemVariantsTbl (conjFormIX info) ;
i = info ;
@@ -709,8 +776,8 @@ resource ParadigmsMlt = open
derivedV_X : Str -> Root -> V = \mammaX, root ->
let
class : VClass = classifyRoot root ;
patt : Pattern = extractPattern mammaX ;
info : VerbInfo = mkVerbInfo class FormX root patt mammaX ;
vseq : Vowels = extractVowels mammaX ;
info : VerbInfo = mkVerbInfo class FormX root vseq mammaX ;
in lin V {
s = stemVariantsTbl (conjFormX info) ;
i = info ;
@@ -723,33 +790,33 @@ resource ParadigmsMlt = open
-- Regular strong verb ("sħiħ"), eg KITEB
strongV : V = overload {
-- Params: root, pattern
strongV : Root -> Pattern -> V = \root,patt ->
let imp = conjStrongImp root patt
in strongVWorst root patt imp ;
-- Params: root, vowels
strongV : Root -> Vowels -> V = \root,vseq ->
let imp = conjStrongImp root vseq
in strongVWorst root vseq imp ;
-- Params: root, pattern, imperative P2Sg
strongV : Root -> Pattern -> Str -> V =\root,patt,imp_sg ->
-- Params: root, vowels, imperative P2Sg
strongV : Root -> Vowels -> Str -> V =\root,vseq,imp_sg ->
let
imp = table {
Sg => imp_sg ;
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
strongVWorst : Root -> Pattern -> (Number => Str) -> V = \root,patt,imp ->
strongVWorst : Root -> Vowels -> (Number => Str) -> V = \root,vseq,imp ->
let
tbl : (VForm => Str) = table {
VPerf agr => ( conjStrongPerf root patt ) ! agr ;
VPerf agr => ( conjStrongPerf root vseq ) ! agr ;
VImpf agr => ( conjStrongImpf (imp ! Sg) (imp ! Pl) ) ! agr ;
VImp n => imp ! n ;
VPresPart _ => 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 {
s = stemVariantsTbl tbl ;
i = info ;
@@ -763,15 +830,15 @@ resource ParadigmsMlt = open
-- Liquid-medial strong verb, eg ŻELAQ
liquidMedialV : V = overload {
-- Params: root, pattern
liquidMedialV : Root -> Pattern -> V = \root,patt ->
let imp = conjLiquidMedialImp root patt
in liquidMedialVWorst root patt imp ;
-- Params: root, vowels
liquidMedialV : Root -> Vowels -> V = \root,vseq ->
let imp = conjLiquidMedialImp root vseq
in liquidMedialVWorst root vseq imp ;
-- Params: root, pattern, imperative P2Sg
liquidMedialV : Root -> Pattern -> Str -> V = \root,patt,imp_sg ->
-- Params: root, vowels, imperative P2Sg
liquidMedialV : Root -> Vowels -> Str -> V = \root,vseq,imp_sg ->
let
vowels = extractPattern imp_sg ;
vowels = extractVowels imp_sg ;
imp = table {
Sg => imp_sg ;
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
}
} ;
in liquidMedialVWorst root patt imp ;
in liquidMedialVWorst root vseq imp ;
} ;
-- 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
tbl : (VForm => Str) = table {
VPerf agr => ( conjLiquidMedialPerf root patt ) ! agr ;
VPerf agr => ( conjLiquidMedialPerf root vseq ) ! agr ;
VImpf agr => ( conjLiquidMedialImpf (imp ! Sg) (imp ! Pl) ) ! agr ;
VImp n => imp ! n ;
VPresPart _ => 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 {
s = stemVariantsTbl tbl ;
i = info ;
@@ -806,33 +873,33 @@ resource ParadigmsMlt = open
-- Geminated strong verb ("trux"), eg ĦABB
geminatedV : V = overload {
-- Params: root, pattern
geminatedV : Root -> Pattern -> V = \root,patt ->
let imp = conjGeminatedImp root patt
in geminatedVWorst root patt imp ;
-- Params: root, vowels
geminatedV : Root -> Vowels -> V = \root,vseq ->
let imp = conjGeminatedImp root vseq
in geminatedVWorst root vseq imp ;
-- Params: root, pattern, imperative P2Sg
geminatedV : Root -> Pattern -> Str -> V = \root,patt,imp_sg ->
-- Params: root, vowels, imperative P2Sg
geminatedV : Root -> Vowels -> Str -> V = \root,vseq,imp_sg ->
let
imp = table {
Sg => imp_sg ;
Pl => imp_sg + "u" -- ŻOMM > ŻOMMU
} ;
in geminatedVWorst root patt imp ;
in geminatedVWorst root vseq imp ;
};
-- Worst case for reduplicated verb
geminatedVWorst : Root -> Pattern -> (Number => Str) -> V = \root,patt,imp ->
geminatedVWorst : Root -> Vowels -> (Number => Str) -> V = \root,vseq,imp ->
let
tbl : (VForm => Str) = table {
VPerf agr => ( conjGeminatedPerf root patt ) ! agr ;
VPerf agr => ( conjGeminatedPerf root vseq ) ! agr ;
VImpf agr => ( conjGeminatedImpf (imp ! Sg) (imp ! Pl) ) ! agr ;
VImp n => imp ! n ;
VPresPart _ => 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 {
s = stemVariantsTbl tbl ;
i = info ;
@@ -845,33 +912,33 @@ resource ParadigmsMlt = open
-- Assimilative weak verb, eg WASAL
assimilativeV : V = overload {
-- Params: root, pattern
assimilativeV : Root -> Pattern -> V = \root,patt ->
let imp = conjAssimilativeImp root patt
in assimilativeVWorst root patt imp ;
-- Params: root, vowels
assimilativeV : Root -> Vowels -> V = \root,vseq ->
let imp = conjAssimilativeImp root vseq
in assimilativeVWorst root vseq imp ;
-- Params: root, pattern, imperative P2Sg
assimilativeV : Root -> Pattern -> Str -> V =\root,patt,imp_sg ->
-- Params: root, vowels, imperative P2Sg
assimilativeV : Root -> Vowels -> Str -> V =\root,vseq,imp_sg ->
let
imp = table {
Sg => imp_sg ;
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
assimilativeVWorst : Root -> Pattern -> (Number => Str) -> V = \root,patt,imp ->
assimilativeVWorst : Root -> Vowels -> (Number => Str) -> V = \root,vseq,imp ->
let
tbl : (VForm => Str) = table {
VPerf agr => ( conjAssimilativePerf root patt ) ! agr ;
VPerf agr => ( conjAssimilativePerf root vseq ) ! agr ;
VImpf agr => ( conjAssimilativeImpf (imp ! Sg) (imp ! Pl) ) ! agr ;
VImp n => imp ! n ;
VPresPart _ => 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 {
s = stemVariantsTbl tbl ;
i = info ;
@@ -884,33 +951,33 @@ resource ParadigmsMlt = open
-- Hollow weak verb, eg SAR (S-J-R)
hollowV : V = overload {
-- Params: root, pattern
hollowV : Root -> Pattern -> V = \root,patt ->
let imp = conjHollowImp root patt
in hollowVWorst root patt imp ;
-- Params: root, vowels
hollowV : Root -> Vowels -> V = \root,vseq ->
let imp = conjHollowImp root vseq
in hollowVWorst root vseq imp ;
-- Params: root, pattern, imperative P2Sg
hollowV : Root -> Pattern -> Str -> V =\root,patt,imp_sg ->
-- Params: root, vowels, imperative P2Sg
hollowV : Root -> Vowels -> Str -> V =\root,vseq,imp_sg ->
let
imp = table {
Sg => imp_sg ;
Pl => imp_sg + "u" -- SIR > SIRU
} ;
in hollowVWorst root patt imp ;
in hollowVWorst root vseq imp ;
} ;
-- Worst case for hollow verb
hollowVWorst : Root -> Pattern -> (Number => Str) -> V = \root,patt,imp ->
hollowVWorst : Root -> Vowels -> (Number => Str) -> V = \root,vseq,imp ->
let
tbl : (VForm => Str) = table {
VPerf agr => ( conjHollowPerf root patt ) ! agr ;
VPerf agr => ( conjHollowPerf root vseq ) ! agr ;
VImpf agr => ( conjHollowImpf (imp ! Sg) (imp ! Pl) ) ! agr ;
VImp n => imp ! n ;
VPresPart _ => 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 {
s = stemVariantsTbl tbl ;
i = info ;
@@ -923,13 +990,13 @@ resource ParadigmsMlt = open
-- Lacking (nieqes) verb, eg MEXA (M-X-J)
lackingV : V = overload {
-- Params: root, pattern
lackingV : Root -> Pattern -> V = \root,patt ->
let imp = conjLackingImp root patt
in lackingVWorst root patt imp ;
-- Params: root, vowels
lackingV : Root -> Vowels -> V = \root,vseq ->
let imp = conjLackingImp root vseq
in lackingVWorst root vseq imp ;
-- Params: root, pattern, imperative P2Sg
lackingV : Root -> Pattern -> Str -> V =\root,patt,imp_sg ->
-- Params: root, vowels, imperative P2Sg
lackingV : Root -> Vowels -> Str -> V =\root,vseq,imp_sg ->
let
imp = table {
Sg => imp_sg ;
@@ -939,21 +1006,21 @@ resource ParadigmsMlt = open
x => (dropSfx 1 x) + "u" --- unknown case
}
} ;
in lackingVWorst root patt imp ;
in lackingVWorst root vseq imp ;
} ;
-- Worst case for lacking verb
lackingVWorst : Root -> Pattern -> (Number => Str) -> V = \root,patt,imp ->
lackingVWorst : Root -> Vowels -> (Number => Str) -> V = \root,vseq,imp ->
let
tbl : (VForm => Str) = table {
VPerf agr => ( conjLackingPerf root patt ) ! agr ;
VPerf agr => ( conjLackingPerf root vseq ) ! agr ;
VImpf agr => ( conjLackingImpf (imp ! Sg) (imp ! Pl) ) ! agr ;
VImp n => imp ! n ;
VPresPart _ => 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 {
s = stemVariantsTbl tbl ;
i = info ;
@@ -966,33 +1033,33 @@ resource ParadigmsMlt = open
-- Defective verb, eg QALA' (Q-L-GĦ)
defectiveV : V = overload {
-- Params: root, pattern
defectiveV : Root -> Pattern -> V = \root,patt ->
let imp = conjDefectiveImp root patt
in defectiveVWorst root patt imp ;
-- Params: root, vowels
defectiveV : Root -> Vowels -> V = \root,vseq ->
let imp = conjDefectiveImp root vseq
in defectiveVWorst root vseq imp ;
-- Params: root, pattern, imperative P2Sg
defectiveV : Root -> Pattern -> Str -> V =\root,patt,imp_sg ->
-- Params: root, vowels, imperative P2Sg
defectiveV : Root -> Vowels -> Str -> V =\root,vseq,imp_sg ->
let
imp = table {
Sg => imp_sg ;
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
defectiveVWorst : Root -> Pattern -> (Number => Str) -> V = \root,patt,imp ->
defectiveVWorst : Root -> Vowels -> (Number => Str) -> V = \root,vseq,imp ->
let
tbl : (VForm => Str) = table {
VPerf agr => ( conjDefectivePerf root patt ) ! agr ;
VPerf agr => ( conjDefectivePerf root vseq ) ! agr ;
VImpf agr => ( conjDefectiveImpf (imp ! Sg) (imp ! Pl) ) ! agr ;
VImp n => imp ! n ;
VPresPart _ => 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 {
s = stemVariantsTbl tbl ;
i = info ;
@@ -1005,33 +1072,33 @@ resource ParadigmsMlt = open
-- Make a Quad verb, eg DENDEL (D-L-D-L)
quadV : V = overload {
-- Params: root, pattern
quadV : Root -> Pattern -> V = \root,patt ->
let imp = conjQuadImp root patt
in quadVWorst root patt imp ;
-- Params: root, vowels
quadV : Root -> Vowels -> V = \root,vseq ->
let imp = conjQuadImp root vseq
in quadVWorst root vseq imp ;
-- Params: root, pattern, imperative P2Sg
quadV : Root -> Pattern -> Str -> V =\root,patt,imp_sg ->
-- Params: root, vowels, imperative P2Sg
quadV : Root -> Vowels -> Str -> V =\root,vseq,imp_sg ->
let
imp = table {
Sg => imp_sg ;
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
quadVWorst : Root -> Pattern -> (Number => Str) -> V = \root,patt,imp ->
quadVWorst : Root -> Vowels -> (Number => Str) -> V = \root,vseq,imp ->
let
tbl : (VForm => Str) = table {
VPerf agr => ( conjQuadPerf root patt ) ! agr ;
VPerf agr => ( conjQuadPerf root vseq ) ! agr ;
VImpf agr => ( conjQuadImpf (imp ! Sg) (imp ! Pl) ) ! agr ;
VImp n => imp ! n ;
VPresPart _ => 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 {
s = stemVariantsTbl tbl ;
i = info ;
@@ -1044,13 +1111,13 @@ resource ParadigmsMlt = open
-- Make a weak-final Quad verb, eg SERVA (S-R-V-J)
quadWeakV : V = overload {
-- Params: root, pattern
quadWeakV : Root -> Pattern -> V = \root,patt ->
let imp = conjQuadWeakImp root patt
in quadWeakVWorst root patt imp ;
-- Params: root, vowels
quadWeakV : Root -> Vowels -> V = \root,vseq ->
let imp = conjQuadWeakImp root vseq
in quadWeakVWorst root vseq imp ;
-- Params: root, pattern, imperative P2Sg
quadWeakV : Root -> Pattern -> Str -> V =\root,patt,imp_sg ->
-- Params: root, vowels, imperative P2Sg
quadWeakV : Root -> Vowels -> Str -> V =\root,vseq,imp_sg ->
let
imp = table {
Sg => imp_sg ;
@@ -1059,21 +1126,21 @@ resource ParadigmsMlt = open
_ => (dropSfx 1 imp_sg) + "u" -- SERVI > SERVU
}
} ;
in quadWeakVWorst root patt imp ;
in quadWeakVWorst root vseq imp ;
} ;
-- Worst case for quadWeak verb
quadWeakVWorst : Root -> Pattern -> (Number => Str) -> V = \root,patt,imp ->
quadWeakVWorst : Root -> Vowels -> (Number => Str) -> V = \root,vseq,imp ->
let
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 ;
VImp n => imp ! n ;
VPresPart _ => 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 {
s = stemVariantsTbl tbl ;
i = info ;
@@ -1204,45 +1271,29 @@ resource ParadigmsMlt = open
hasCompl : Prep -> Compl = \p -> p ** { isPresent = True } ;
noCompl : Compl = noPrep ** { isPresent = False } where { noPrep : Prep = mkPrep [] };
mkVS : V -> VS ; -- sentence-compl
mkVS v = lin VS v ;
prepV2 : V -> Prep -> V2 ;
prepV2 v p = lin V2 ( v ** { c2 = hasCompl p } ) ;
dirV2 : V -> V2 ;
-- dirV2 v = prepV2 v noPrep ;
dirV2 v = lin V2 ( v ** { c2 = noCompl } ) ;
prepPrepV3 : V -> Prep -> Prep -> V3 ;
prepPrepV3 v p t = lin V3 (v ** { c2 = hasCompl p ; c3 = hasCompl t }) ;
dirV3 : V -> Prep -> V3 ;
-- dirV3 v p = prepPrepV3 v noPrep p ;
dirV3 v t = lin V3 (v ** { c2 = noCompl ; c3 = hasCompl t }) ;
dirdirV3 : V -> V3 ;
-- dirdirV3 v = dirV3 v noPrep ;
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 : V -> V3 = dirdirV3 ;
mkV3 : V -> Prep -> Prep -> V3 = prepPrepV3 ;
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 }) ;
{- Conjunction -------------------------------------------------------- -}
@@ -1260,10 +1311,15 @@ resource ParadigmsMlt = open
-- Overloaded function for building an adjective
mkA : A = overload {
-- Same form for gender and number; no comparative form.
-- Regular adjective with predictable feminine and plural forms
-- Params:
-- Adjective, eg BLU
mkA : Str -> A = sameA ;
-- Adjective, eg BRAVU
mkA : Str -> A = \masc ->
let
fem = inferAdjFem masc ;
plural = inferAdjPlural fem
in
mk3A masc fem plural ;
-- Infer feminine from masculine; no comparative form.
-- Params:
@@ -1271,7 +1327,7 @@ resource ParadigmsMlt = open
-- Plural, eg SBIEĦ
mkA : Str -> Str -> A = brokenA ;
-- Infer feminine from masculine; no comparative form.
-- Explicit feminine form; no comparative form.
-- Params:
-- Masculine, eg SABIĦ
-- 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 ;
-- Adjective with predictable feminine but broken plural
@@ -1307,14 +1352,14 @@ resource ParadigmsMlt = open
-- without comparative form
brokenA : Str -> Str -> A = \masc,plural ->
let
fem = determineAdjFem masc
fem = inferAdjFem masc
in
mk3A masc fem plural ;
-- with comparative form
brokenA : Str -> Str -> Str -> A = \masc,plural,compar ->
let
fem = determineAdjFem masc
fem = inferAdjFem masc
in
mk4A masc fem plural compar ;
@@ -1330,22 +1375,6 @@ resource ParadigmsMlt = open
mk4A = \masc,fem,plural,compar ->
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 p = lin A2 (a ** {c2 = hasCompl p}) ;
@@ -1353,10 +1382,6 @@ resource ParadigmsMlt = open
-- dirA2 a = prepA2 a noPrep ;
dirA2 a = lin A2 (a ** {c2 = noCompl}) ;
mkA2 : overload {
mkA2 : A -> Prep -> A2 ;
mkA2 : A -> Str -> A2 ;
} ;
mkA2 = overload {
mkA2 : A -> Prep -> A2 = prepA2 ;
mkA2 : A -> Str -> A2 = \a,p -> prepA2 a (mkPrep p) ;
@@ -1365,17 +1390,10 @@ resource ParadigmsMlt = open
AS, A2S, AV : Type = A ;
A2V : Type = A2 ;
mkAS : A -> AS ;
mkAS a = a ;
{- 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) ** {
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 };
}

View File

@@ -537,7 +537,7 @@ resource ResMlt = ParamX ** open Prelude, Predef, Maybe in {
class : VClass ;
form : VDerivedForm ;
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!
} ;
@@ -849,8 +849,8 @@ resource ResMlt = ParamX ** open Prelude, Predef, Maybe in {
<VImpf (AgP1 Pl), Pos> => "nkunu" ;
<VImpf (AgP2 Pl), Pos> => "tkunu" ;
<VImpf (AgP3Pl), Pos> => "jkunu" ;
<VImp (Pl), Pos> => "kun" ;
<VImp (Sg), Pos> => "kunu" ;
<VImp (Sg), Pos> => "kun" ;
<VImp (Pl), Pos> => "kunu" ;
<VPerf (AgP1 Sg), Neg> => "kontx" ;
<VPerf (AgP2 Sg), Neg> => "kontx" ;
<VPerf (AgP3Sg Masc), Neg> => "kienx" ;
@@ -865,8 +865,8 @@ resource ResMlt = ParamX ** open Prelude, Predef, Maybe in {
<VImpf (AgP1 Pl), Neg> => "nkunux" ;
<VImpf (AgP2 Pl), Neg> => "tkunux" ;
<VImpf (AgP3Pl), Neg> => "jkunux" ;
<VImp (Pl), Neg> => "kunx" ;
<VImp (Sg), Neg> => "kunux" ;
<VImp (Sg), Neg> => "kunx" ;
<VImp (Pl), Neg> => "kunux" ;
<VPresPart 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 (AgP2 Pl) => mkVerbStems [] "m'intom" ;
VImpf (AgP3Pl) => mkVerbStems "huma" "m'humie" ;
VImp (Pl) => mkVerbStems "kun" ;
VImp (Sg) => mkVerbStems "kunu" ;
VImp (Sg) => mkVerbStems "kun" ;
VImp (Pl) => mkVerbStems "kunu" ;
VPresPart gn => mkVerbStems NONEXIST ;
VPastPart gn => mkVerbStems NONEXIST
} ;
@@ -1043,9 +1043,9 @@ resource ResMlt = ParamX ** open Prelude, Predef, Maybe in {
EorI : Str = "e" | "i" ;
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} ;
-- 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 } ;
} ;
mkPattern : Pattern = overload {
mkPattern : Pattern =
mkVowels : Vowels = overload {
mkVowels : Vowels =
{ V1=[] ; V2=[] } ;
mkPattern : Str -> Pattern = \v1 ->
mkVowels : Str -> Vowels = \v1 ->
{ 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}} ;
} ;
-- Extract first two vowels from a token (designed for semitic verb forms)
--- potentially slow
extractPattern : Str -> Pattern = \s ->
extractVowels : Str -> Vowels = \s ->
case s of {
v1@"ie" + _ + v2@#Vowel + _ => mkPattern v1 v2 ; -- IEQAF
v1@#Vowel + _ + v2@#Vowel + _ => mkPattern v1 v2 ; -- IKTEB
_ + v1@"ie" + _ + v2@#Vowel + _ => mkPattern v1 v2 ; -- RIEQED
_ + v1@"ie" + _ => mkPattern v1 ; -- ŻIED
_ + v1@#Vowel + _ + v2@#Vowel + _ => mkPattern v1 v2 ; -- ĦARBAT
_ + v1@#Vowel + _ => mkPattern v1 ; -- ĦOBB
_ => mkPattern
v1@"ie" + _ + v2@#Vowel + _ => mkVowels v1 v2 ; -- IEQAF
v1@#Vowel + _ + v2@#Vowel + _ => mkVowels v1 v2 ; -- IKTEB
_ + v1@"ie" + _ + v2@#Vowel + _ => mkVowels v1 v2 ; -- RIEQED
_ + v1@"ie" + _ => mkVowels v1 ; -- ŻIED
_ + v1@#Vowel + _ + v2@#Vowel + _ => mkVowels v1 v2 ; -- ĦARBAT
_ + v1@#Vowel + _ => mkVowels v1 ; -- ĦOBB
_ => mkVowels
} ;
-- Create a VerbInfo record, optionally omitting various fields
mkVerbInfo : VerbInfo = overload {
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 ->
{ class=c ; form=f ; root=mkRoot ; patt=mkPattern ; imp=i } ;
mkVerbInfo : VClass -> VDerivedForm -> Root -> Pattern -> VerbInfo = \c,f,r,p ->
{ class=c ; form=f ; root=r ; patt=p ; imp=[] } ;
mkVerbInfo : VClass -> VDerivedForm -> Root -> Pattern -> Str -> VerbInfo = \c,f,r,p,i ->
{ class=c ; form=f ; root=r ; patt=p ; imp=i } ;
-- mkVerbInfo : VClass -> VDerivedForm -> Root -> Pattern -> Pattern -> 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=mkRoot ; vseq=mkVowels ; imp=i } ;
mkVerbInfo : VClass -> VDerivedForm -> Root -> Vowels -> VerbInfo = \c,f,r,p ->
{ class=c ; form=f ; root=r ; vseq=p ; imp=[] } ;
mkVerbInfo : VClass -> VDerivedForm -> Root -> Vowels -> Str -> VerbInfo = \c,f,r,p,i ->
{ class=c ; form=f ; root=r ; vseq=p ; imp=i } ;
-- mkVerbInfo : VClass -> VDerivedForm -> Root -> Vowels -> Vowels -> Str -> VerbInfo = \c,f,r,p,p2,i ->
-- { class=c ; form=f ; root=r ; vseq=p ; vseq2=p2 ; imp=i } ;
} ;
-- Change certain fields of a VerbInfo record
@@ -1109,18 +1109,46 @@ resource ResMlt = ParamX ** open Prelude, Predef, Maybe in {
-- Root
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
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
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 ~~~ -}
NONEXIST : Str = "#NONEXIST#" ;

View File

@@ -152,14 +152,14 @@ concrete StructuralMlt of Structural = CatMlt **
have_V2 = dirV2 (kellu_V) ;
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
"naf" "taf" "jaf" "taf" "nafu" "tafu" "jafu"
"kun af" "kunu afu"
;
sata'_V = mkV "sata'" (ResMlt.mkRoot "s-t-għ") ;
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"
"għandi" "għandek" "għandu" "għandha" "għandna" "għandkom" "għandhom"
"kollok" "kollkom"