use consistent lin X everywhere

This commit is contained in:
Krasimir Angelov
2025-11-14 14:12:57 +01:00
parent 48658e3689
commit c7fe453c12
58 changed files with 330 additions and 334 deletions

View File

@@ -31,15 +31,15 @@ lin
monthAdv january =
let january_CN : CN = mkCN month_Timeunit (mkNP (mkPN january)) ;
january_NP : NP = R.emptyNP **
january_NP : NP = lin NP R.emptyNP **
{s = \\c => R.cn2str january_CN R.Sg R.Const c ;
a = {pgn = R.Per3 january_CN.g R.Sg ; isPron = False}} ;
in SyntaxAra.mkAdv R.biPrep january_NP ;
in SyntaxAra.mkAdv ParadigmsAra.biPrep january_NP ;
yearAdv y = SyntaxAra.mkAdv in_Prep y ;
-- dummy
dayMonthAdv d m = SyntaxAra.mkAdv on_Prep (mkNP d) ; -- on 17 May
dayMonthAdv d m = SyntaxAra.mkAdv on_Prep (mkNP m) ; -- on 17 May
monthYearAdv m y = SyntaxAra.mkAdv on_Prep (mkNP m) ; -- in May 2012
dayMonthYearAdv d m y = SyntaxAra.mkAdv on_Prep y ; -- on 17 May 2013
@@ -51,7 +51,7 @@ lin
let ap = mkAP a in ap ** {
s = \\s,g,n,d,c =>
ap.s ! s ! g ! n ! d ! c
++ (mkAdv R.biPrep (mkNP amount_N)).s
++ (mkAdv ParadigmsAra.biPrep (mkNP amount_N)).s
++ (mkNP card cn).s ! R.Bare ---- ? /IL
} ;
@@ -60,26 +60,26 @@ oper
amount_N : N = mkN "مِقْدَار" "مَقَادِير" masc nohum ;
-- hack used in the name constructions
toNP : Bool -> NP -> NP = \b -> if_then_else NP b R.emptyNP ;
toNP : Bool -> NP -> NP = \b -> if_then_else NP b (lin NP R.emptyNP) ;
lin
-- : NP -> NP -> Cl
have_name_Cl np nm =
let subjPron : Pron = R.np2pron np ;
let subjPron : Pron = lin Pron (R.np2pron np) ;
me : NP = toNP np.a.isPron np ;
myName : NP = E.ApposNP me (mkNP (mkDet subjPron) L.name_N) ;
in mkCl myName nm ;
-- : NP -> QCl
what_name_QCl np =
let subjPron : Pron = R.np2pron np ;
let subjPron : Pron = lin Pron (R.np2pron np) ;
me : R.NP = toNP np.a.isPron np ;
myName : NP = E.ApposNP me (mkNP (mkDet subjPron) L.name_N) ;
what_IP : R.IP = R.mkIP "مَا هُوَ" R.Sg ;
what_IP : IP = lin IP (R.mkIP "مَا هُوَ" R.Sg) ;
in mkQCl what_IP myName ;
how_old_QCl np =
let subjPron : Pron = R.np2pron np ;
let subjPron : Pron = lin Pron (R.np2pron np) ;
me : R.NP = toNP np.a.isPron np ;
age_N = mkN "عُمر" ;
myAge : NP = E.ApposNP me (mkNP (mkDet subjPron) L.name_N) ;

View File

@@ -23,7 +23,7 @@ flags
beautiful_A = sndA "جمل" "فَعِيل" ;
become_VA = mkVA (v4 "صبح") ;
beer_N = sdfN "بير" "فِعلة" Fem NoHum ;
beg_V2V = mkV2V (mkVV (v5 "وسل")) noPrep ;
beg_V2V = mkV2V (mkVV (v5 "وسل")) ParadigmsAra.noPrep ;
big_A = sndA "كبر" "فَعِيل" ;
bike_N = sdfN "درج" "فَعّالة" Fem NoHum ;
bird_N = brkN "طير" "فَعل" "فُعُول" Masc NoHum;
@@ -72,7 +72,7 @@ flags
door_N = brkN "بوب" "فاع" "أَفعَال" Masc NoHum ;
drink_V2 = dirV2 (regV "شَرِب") ;
-- drink_V2 = dirV2 (v1 "شرب" i a) ;
easy_A2V = mkA2 (sndA "سهل" "فَعل") liPrep ;
easy_A2V = mkA2 (sndA "سهل" "فَعل") ParadigmsAra.liPrep ;
eat_V2 = dirV2 (mkV "ءكل" FormI) ;
empty_A = sndA "فرغ" "فاعِل" ;
enemy_N = brkN "عدو" "فَعُلّ" "أَفعَاء" Masc Hum ;
@@ -202,7 +202,7 @@ flags
switch8off_V2 = dirV2 (v4 "طفء") ;
switch8on_V2 = dirV2 (v4 "شعل") ;
table_N = sdfN "طول" "فاعِلة" Fem NoHum ;
talk_V3 = mkV3 (v5 "حدث") liPrep (mkPrep "عَن") ;
talk_V3 = mkV3 (v5 "حدث") ParadigmsAra.liPrep (mkPrep "عَن") ;
teacher_N = sdmN "علم" "مُفَعِّل" Masc Hum ; --mucal~imö
teach_V2 = dirV2 (v2 "علم") ;
television_N = mkN (sndf "تِلِفِزيُون") Masc NoHum ;

View File

@@ -108,7 +108,7 @@ resource ParadigmsAra = open
---- ++ n.s2 ! Sg ! Def ! c -- NB this hack works for idaafa constructions (if you used mkN : N -> N -> N), but wrong for mkN : N -> A -> N. /IL
---- }))) ;
mkLN : NP -> LN
= \np -> np ;
= \np -> lin LN np ;
} ;
--3 Relational nouns
@@ -814,7 +814,7 @@ resource ParadigmsAra = open
dirV3 = overload {
dirV3 : V -> Prep -> V3 = \v,p -> mkV3 v (casePrep acc) p ;
dirV3 : V -> Str -> V3 = \v,s -> mkV3 v (casePrep acc) (mkPreposition s)
dirV3 : V -> Str -> V3 = \v,s -> mkV3 v (casePrep acc) (mkPrep s)
} ;
dirdirV3 v = dirV3 v (casePrep acc) ;
@@ -875,7 +875,7 @@ resource ParadigmsAra = open
mkAS,
mkAV = \a -> a ;
mkA2S,
mkA2V = \a,p -> prepA2 a (mkPreposition p) ;
mkA2V = \a,p -> lin A (prepA2 a (mkPreposition p)) ;
@@ -951,25 +951,25 @@ oper
wmkA : {masc_sg, masc_pl, root, sg_patt : Str} -> A
= \r -> mkA r.root r.sg_patt ;
wmkA : {masc_sg, fem_sg, masc_pl, fem_pl, root, pl_patt : Str} -> A
= \r -> mascFemAdj r.masc_sg r.fem_sg ;
= \r -> mascFemA r.masc_sg r.fem_sg ;
wmkA : {masc_sg, fem_sg, masc_pl, fem_pl, root : Str} -> A
= \r -> mascFemAdj r.masc_sg r.fem_sg ;
= \r -> mascFemA r.masc_sg r.fem_sg ;
wmkA : {masc_sg, fem_sg, root : Str} -> A
= \r -> mkA r.root ; ----
wmkA : {masc_sg, fem_sg, masc_pl, fem_pl, pl_patt : Str} -> A
= \r -> mascFemAdj r.masc_sg r.fem_sg ;
= \r -> mascFemA r.masc_sg r.fem_sg ;
wmkA : {masc_sg : Str; fem_sg : Str; fem_pl : Str} -> A
= \r -> mascFemAdj r.masc_sg r.fem_sg ;
= \r -> mascFemA r.masc_sg r.fem_sg ;
wmkA : {masc_sg : Str; fem_sg : Str; root : Str ; sg_patt : Str} -> A
= \r -> mkA r.root r.sg_patt ;
wmkA : {masc_sg : Str; fem_sg : Str} -> A
= \r -> mascFemAdj r.masc_sg r.fem_sg ;
= \r -> mascFemA r.masc_sg r.fem_sg ;
wmkA : {masc_sg : Str; masc_pl : Str; fem_sg : Str; fem_pl : Str} -> A
= \r -> mascFemAdj r.masc_sg r.fem_sg ;
= \r -> mascFemA r.masc_sg r.fem_sg ;
wmkA : {masc_sg : Str; masc_pl : Str; fem_sg : Str; root : Str} -> A
= \r -> mkA r.root ;
wmkA : {masc_sg : Str; masc_pl : Str; fem_sg : Str} -> A
= \r -> mascFemAdj r.masc_sg r.fem_sg ;
= \r -> mascFemA r.masc_sg r.fem_sg ;
wmkA : {masc_sg : Str; masc_pl : Str; root : Str} -> A
= \r -> mkA r.root ;
wmkA : {masc_sg : Str; masc_pl, pl_patt : Str; root : Str} -> A

View File

@@ -124,7 +124,7 @@ concrete StructuralAra of Structural = CatAra **
youPl_Pron = youPlMasc_Pron ;
youPol_Pron = youPlFem_Pron ; -- arbitrary?
have_V2 = mkV2 ladaa_V (casePrep nom) ; -- "X has Y" literally "Y<nom> is on X<nom>"
have_V2 = mkV2 (lin V ladaa_V) (casePrep nom) ; -- "X has Y" literally "Y<nom> is on X<nom>"
--have_V2 = dirV2 (regV "يَملِك") ; -- "X<nom> owns/possesses Y<acc>"
lin language_title_Utt = {s = \\_ => "العربية"} ;

View File

@@ -400,39 +400,39 @@ oper
mkV : Str -> Str -> V = reg2V -- s Imperative_Jussive;Pl
} ;
mkVV : V -> VV = \v -> v ;
mkVS : V -> VS = \v -> v ;
mkVQ : V -> VQ = \v -> v ;
mkVA : V -> VA = \v -> v ;
mkVV : V -> VV = \v -> lin VV v ;
mkVS : V -> VS = \v -> lin VS v ;
mkVQ : V -> VQ = \v -> lin VQ v ;
mkVA : V -> VA = \v -> lin VA v ;
mkV2 = overload {
mkV2 : V -> V2 = \v -> v ** {c2 = noPrep} ;
mkV2 : V -> Prep -> V2 = \v,p -> v ** {c2 = p} ;
mkV2 : V -> V2 = \v -> lin V2 (v ** {c2 = noPrep}) ;
mkV2 : V -> Prep -> V2 = \v,p -> lin V2 (v ** {c2 = p}) ;
} ;
mkV3 = overload {
mkV3 : V -> V3 = \v -> v ** {c2 = noPrep; c3 = noPrep} ;
mkV3 : V -> Prep -> Prep -> V3 = \v,p1,p2 -> v ** {c2 = p1; c3 = p2} ;
mkV3 : V -> V3 = \v -> lin V3 (v ** {c2 = noPrep; c3 = noPrep}) ;
mkV3 : V -> Prep -> Prep -> V3 = \v,p1,p2 -> lin V3 (v ** {c2 = p1; c3 = p2}) ;
} ;
mkV2A = overload {
mkV2A : V -> V2A = \v -> v ** {c2 = noPrep; c3 = noPrep} ;
mkV2A : V -> Prep -> Prep -> V2A = \v,p1,p2 -> v ** {c2 = p1; c3 = p2} ;
mkV2A : V -> V2A = \v -> lin V2A (v ** {c2 = noPrep; c3 = noPrep}) ;
mkV2A : V -> Prep -> Prep -> V2A = \v,p1,p2 -> lin V2A (v ** {c2 = p1; c3 = p2}) ;
} ;
mkV2S = overload {
mkV2S : V -> V2S = \v -> v ** {c2 = noPrep; c3 = noPrep} ;
mkV2S : V -> Prep -> Prep -> V2S = \v,p1,p2 -> v ** {c2 = p1; c3 = p2} ;
mkV2S : V -> V2S = \v -> lin V2S (v ** {c2 = noPrep; c3 = noPrep}) ;
mkV2S : V -> Prep -> Prep -> V2S = \v,p1,p2 -> lin V2S (v ** {c2 = p1; c3 = p2}) ;
} ;
mkV2Q = overload {
mkV2Q : V -> V2Q = \v -> v ** {c2 = noPrep; c3 = noPrep} ;
mkV2Q : V -> Prep -> Prep -> V2Q = \v,p1,p2 -> v ** {c2 = p1; c3 = p2} ;
mkV2Q : V -> V2Q = \v -> lin V2Q (v ** {c2 = noPrep; c3 = noPrep}) ;
mkV2Q : V -> Prep -> Prep -> V2Q = \v,p1,p2 -> lin V2Q (v ** {c2 = p1; c3 = p2}) ;
} ;
mkV2V = overload {
mkV2V : V -> V2V = \v -> v ** {c2 = noPrep; c3 = noPrep} ;
mkV2V : V -> Prep -> Prep -> V2V = \v,p1,p2 -> v ** {c2 = p1; c3 = p2} ;
mkV2V : V -> V2V = \v -> lin V2V (v ** {c2 = noPrep; c3 = noPrep}) ;
mkV2V : V -> Prep -> Prep -> V2V = \v,p1,p2 -> lin V2V (v ** {c2 = p1; c3 = p2}) ;
} ;
mkN = overload {
@@ -441,13 +441,13 @@ oper
} ;
mkN2 = overload {
mkN2 : N -> N2 = \n -> n ** {c2 = noPrep} ;
mkN2 : N -> Prep -> N2 = \n,p -> n ** {c2 = p} ;
mkN2 : N -> N2 = \n -> lin N2 (n ** {c2 = noPrep}) ;
mkN2 : N -> Prep -> N2 = \n,p -> lin N2 (n ** {c2 = p}) ;
} ;
mkN3 = overload {
mkN3 : N -> N3 = \n -> n ** {c2 = noPrep; c3 = noPrep} ;
mkN3 : N -> Prep -> Prep -> N3 = \n,p1,p2 -> n ** {c2 = p1; c3 = p2} ;
mkN3 : N -> N3 = \n -> lin N3 (n ** {c2 = noPrep; c3 = noPrep}) ;
mkN3 : N -> Prep -> Prep -> N3 = \n,p1,p2 -> lin N3 (n ** {c2 = p1; c3 = p2}) ;
} ;
mkA = overload {
@@ -456,8 +456,8 @@ oper
} ;
mkA2 = overload {
mkA2 : A -> A2 = \a -> a ** {c2 = noPrep} ;
mkA2 : A -> Prep -> A2 = \a,p -> a ** {c2 = p} ;
mkA2 : A -> A2 = \a -> lin A2 (a ** {c2 = noPrep}) ;
mkA2 : A -> Prep -> A2 = \a,p -> lin A2 (a ** {c2 = p}) ;
} ;
mkAdv : Str -> Adv = \s -> lin Adv {s=s} ;

View File

@@ -91,7 +91,7 @@ oper
-- Use linCNIndef so that words with FinalA get the -a at the end
baseCN : CN -> CN -> [CN] = \x,y ->
y ** --choose all the other fields from second argument
lin ListCN y ** --choose all the other fields from second argument
{ s1 = \\agr => linCNIndef x ;
s2 = y.s } ;

View File

@@ -67,7 +67,7 @@ oper
mkA = overload {
mkA : Str -> A = \s -> lin A (regAdj s) ;
mkA : Str -> A -> A = \s,a -> irregAdvAdj s a
mkA : Str -> A -> A = \s,a -> lin A (irregAdvAdj s a)
} ;
mkA2 : Str -> Prep -> A2 = \s,pp -> lin A2 (regAdj s ** { compl = pp }) ;
@@ -104,7 +104,7 @@ oper
mkV2A : Str -> V2A = \s -> lin V2A (mkVerbDu s) ; -- Nor-nork
mkVQ : Str -> VQ = \s -> lin VQ (mkVerbDu s) ; -- Nor-nork
mkVS : Str -> VS = \s -> lin VS (mkVerbDu s) ; -- Nor-nork
mkVV : V -> VV = \v -> v ;
mkVV : V -> VV = \v -> lin VV v ;
mkV2V : Str -> V2V = \s -> lin V2V (mkVerbDio s) ; -- ??? TODO check valency
mkV2S : Str -> V2S = \s -> lin V2S (mkVerbDio s) ; -- Nor-nori-nork: (mutilari) (neska datorrela) erantzun diot

View File

@@ -752,13 +752,13 @@ oper
} ;
mkN2 = overload {
mkN2 : N -> N2 = \n -> n ** {c2 = noPrep} ;
mkN2 : N -> Prep -> N2 = \n,p -> n ** {c2 = p} ;
mkN2 : N -> N2 = \n -> lin N2 (n ** {c2 = noPrep}) ;
mkN2 : N -> Prep -> N2 = \n,p -> lin N2 (n ** {c2 = p}) ;
} ;
mkN3 = overload {
mkN3 : N -> N3 = \n -> n ** {c2 = noPrep; c3 = noPrep} ;
mkN3 : N -> Prep -> Prep -> N3 = \n,p1,p2 -> n ** {c2 = p1; c3 = p2} ;
mkN3 : N -> N3 = \n -> lin N3 (n ** {c2 = noPrep; c3 = noPrep}) ;
mkN3 : N -> Prep -> Prep -> N3 = \n,p1,p2 -> lin N3 (n ** {c2 = p1; c3 = p2}) ;
} ;
mkV = overload {
@@ -766,39 +766,39 @@ oper
mkV : Str -> Str -> V = reg2V -- infinitive Imperative;Sg
} ;
mkVV : V -> VV = \v -> v ;
mkVS : V -> VS = \v -> v ;
mkVQ : V -> VQ = \v -> v ;
mkVA : V -> VA = \v -> v ;
mkVV : V -> VV = \v -> lin VV v ;
mkVS : V -> VS = \v -> lin VS v ;
mkVQ : V -> VQ = \v -> lin VQ v ;
mkVA : V -> VA = \v -> lin VA v ;
mkV2 = overload {
mkV2 : V -> V2 = \v -> v ** {c2 = noPrep} ;
mkV2 : V -> Prep -> V2 = \v,p -> v ** {c2 = p} ;
mkV2 : V -> V2 = \v -> lin V2 (v ** {c2 = noPrep}) ;
mkV2 : V -> Prep -> V2 = \v,p -> lin V2 (v ** {c2 = p}) ;
} ;
mkV3 = overload {
mkV3 : V -> V3 = \v -> v ** {c2 = noPrep; c3 = noPrep} ;
mkV3 : V -> Prep -> Prep -> V3 = \v,p1,p2 -> v ** {c2 = p1; c3 = p2} ;
mkV3 : V -> V3 = \v -> lin V3 (v ** {c2 = noPrep; c3 = noPrep}) ;
mkV3 : V -> Prep -> Prep -> V3 = \v,p1,p2 -> lin V3 (v ** {c2 = p1; c3 = p2}) ;
} ;
mkV2A = overload {
mkV2A : V -> V2A = \v -> v ** {c2 = noPrep; c3 = noPrep} ;
mkV2A : V -> Prep -> Prep -> V2A = \v,p1,p2 -> v ** {c2 = p1; c3 = p2} ;
mkV2A : V -> V2A = \v -> lin V2A (v ** {c2 = noPrep; c3 = noPrep}) ;
mkV2A : V -> Prep -> Prep -> V2A = \v,p1,p2 -> lin V2A (v ** {c2 = p1; c3 = p2}) ;
} ;
mkV2S = overload {
mkV2S : V -> V2S = \v -> v ** {c2 = noPrep; c3 = noPrep} ;
mkV2S : V -> Prep -> Prep -> V2S = \v,p1,p2 -> v ** {c2 = p1; c3 = p2} ;
mkV2S : V -> V2S = \v -> lin V2S (v ** {c2 = noPrep; c3 = noPrep}) ;
mkV2S : V -> Prep -> Prep -> V2S = \v,p1,p2 -> lin V2S (v ** {c2 = p1; c3 = p2}) ;
} ;
mkV2Q = overload {
mkV2Q : V -> V2Q = \v -> v ** {c2 = noPrep; c3 = noPrep} ;
mkV2Q : V -> Prep -> Prep -> V2Q = \v,p1,p2 -> v ** {c2 = p1; c3 = p2} ;
mkV2Q : V -> V2Q = \v -> lin V2Q (v ** {c2 = noPrep; c3 = noPrep}) ;
mkV2Q : V -> Prep -> Prep -> V2Q = \v,p1,p2 -> lin V2Q (v ** {c2 = p1; c3 = p2}) ;
} ;
mkV2V = overload {
mkV2V : V -> V2V = \v -> v ** {c2 = noPrep; c3 = noPrep} ;
mkV2V : V -> Prep -> Prep -> V2V = \v,p1,p2 -> v ** {c2 = p1; c3 = p2} ;
mkV2V : V -> V2V = \v -> lin V2V (v ** {c2 = noPrep; c3 = noPrep}) ;
mkV2V : V -> Prep -> Prep -> V2V = \v,p1,p2 -> lin V2V (v ** {c2 = p1; c3 = p2}) ;
} ;
mkA = overload {
@@ -807,8 +807,8 @@ oper
} ;
mkA2 = overload {
mkA2 : A -> A2 = \a -> a ** {c2 = noPrep} ;
mkA2 : A -> Prep -> A2 = \a,p -> a ** {c2 = p} ;
mkA2 : A -> A2 = \a -> lin A2 (a ** {c2 = noPrep}) ;
mkA2 : A -> Prep -> A2 = \a,p -> lin A2 (a ** {c2 = p}) ;
} ;
mkAdv : Str -> Adv = \s -> lin Adv {s=s} ;

View File

@@ -1,4 +1,4 @@
--# -path=.:../abstract:../common:../api
--# -path=.:../abstract:../common:../api:../prelude
concrete LangBul of Lang =
GrammarBul,

View File

@@ -168,7 +168,7 @@ oper
--
prepN2 : N -> Prep -> N2 ;
prepN2 n p = n ** {c2 = p} ;
prepN2 n p = lin N2 (n ** {c2 = p}) ;
dirN2 : N -> N2 ;
dirN2 n = prepN2 n noPrep ;
@@ -178,7 +178,7 @@ oper
--
prepN3 : N -> Prep -> Prep -> N3 ;
prepN3 n p q = n ** {c2 = p; c3 = q} ;
prepN3 n p q = lin N3 (n ** {c2 = p; c3 = q}) ;
dirN3 : N -> Prep -> N3 ;
dirN3 n p = prepN3 n noPrep p ;

View File

@@ -183,7 +183,7 @@ oper
mkInterj : Str -> Interj
= \s -> lin Interj {s = word s} ;
emptyPrep : Preposition = mkPrep [] ;
emptyPrep : Prep = mkPrep [] ;
mkpNP : Str -> CatChi.NP
= \s -> lin NP {s = word s ; det = []} ;

View File

@@ -182,7 +182,7 @@ concrete ExtendEng of Extend =
BaseVPS2 x y =
let baseX : OneFinVPS = baseVPS2 x ;
baseY : OneFinVPS = baseVPS y ;
baseY : OneFinVPS = baseVPS (lin VPS y) ;
in twoTable2 Order Agr baseX baseY ** {fin = baseX.fin ; c2 = y.c2} ;
ConsVPS2 x xs =
let baseX : OneFinVPS = baseVPS2 x ;
@@ -323,8 +323,8 @@ lin BaseImp = twoTable2 CPolarity ImpForm ;
} ;
lin
PassVPSlash vps = passVPSlash (lin VPS vps) [] ;
PassAgentVPSlash vps np = passVPSlash (lin VPS vps) ("by" ++ np.s ! NPAcc) ;
PassVPSlash vps = passVPSlash (lin VPSlash vps) [] ;
PassAgentVPSlash vps np = passVPSlash (lin VPSlash vps) ("by" ++ np.s ! NPAcc) ;
ProgrVPSlash vp = insertObjc (\\a => vp.ad ! a ++ vp.prp ++ vp.p ++ vp.s2 ! a)
(predAux auxBe ** {c2 = vp.c2; gapInMiddle = vp.gapInMiddle; missingAdv = vp.missingAdv});

View File

@@ -353,7 +353,7 @@ concrete ExtendEst of Extend =
-- : VPSlash -> AP ; -- täna leitud
PastPartAP vp = {
s = \\_,_ => vp2adv <vp : VP> <True : Bool> <PastPart Pass : VForm> ;
s = \\_,_ => vp2adv (lin VP vp) <True : Bool> <PastPart Pass : VForm> ;
infl = Invariable
} ;
@@ -366,7 +366,7 @@ concrete ExtendEst of Extend =
-- : VPSlash -> NP -> AP -- hobisukeldujate poolt leitud (süvaveepomm)
PastPartAgentAP vp np = {
s = \\_,_ => appCompl True Pos by8agent_Prep np
++ vp2adv <vp : VP> <True : Bool> <PastPart Pass : VForm> ;
++ vp2adv (lin VP vp) <True : Bool> <PastPart Pass : VForm> ;
infl = Invariable
} ;
@@ -374,7 +374,7 @@ concrete ExtendEst of Extend =
-- : AP -> VP -> Cl ; -- it is good to walk / on hea kõndida
PredAPVP ap vp =
let heaOllaVP : VP = insertObj (\\_,_,_ => ap.s ! True ! NCase Sg Nom) vp ; -- puts AP into the s2 field
let heaOllaVP : VP = lin VP (insertObj (\\_,_,_ => ap.s ! True ! NCase Sg Nom) vp) ; -- puts AP into the s2 field
heaOllaComp : Comp = CompVP ASimul PPos heaOllaVP ; -- chooses InfDa, fixes word order
heaOlla : VP = UseComp heaOllaComp -- looks silly, but I want to reuse the abstract syntax funs :-P
in existClause noSubj (agrP3 Sg) heaOlla ;

View File

@@ -970,9 +970,9 @@ oper
mkV2Q v p = lin V2Q (mk2V2 v p) ;
mkAS a = a ;
mkA2S a p = mkA2 a p ;
mkA2S a p = lin A (mkA2 a p) ;
mkAV a = a ;
mkA2V a p = mkA2 a p ;
mkA2V a p = lin A (mkA2 a p) ;
mkMU : Str -> MU = \s -> lin MU {s=s; isPre=False} ;

View File

@@ -480,13 +480,13 @@ oper
} ;
mkN2 = overload {
mkN2 : N -> N2 = \n -> n ** {c2 = noPrep} ;
mkN2 : N -> Prep -> N2 = \n,p -> n ** {c2 = p} ;
mkN2 : N -> N2 = \n -> lin N2 (n ** {c2 = noPrep}) ;
mkN2 : N -> Prep -> N2 = \n,p -> lin N2 (n ** {c2 = p}) ;
} ;
mkN3 = overload {
mkN3 : N -> N3 = \n -> n ** {c2 = noPrep; c3 = noPrep} ;
mkN3 : N -> Prep -> Prep -> N3 = \n,p1,p2 -> n ** {c2 = p1; c3 = p2} ;
mkN3 : N -> N3 = \n -> lin N3 (n ** {c2 = noPrep; c3 = noPrep}) ;
mkN3 : N -> Prep -> Prep -> N3 = \n,p1,p2 -> lin N3 (n ** {c2 = p1; c3 = p2}) ;
} ;
mkA = overload {
@@ -495,8 +495,8 @@ oper
} ;
mkA2 = overload {
mkA2 : A -> A2 = \a -> a ** {c2 = noPrep} ;
mkA2 : A -> Prep -> A2 = \a,p -> a ** {c2 = p} ;
mkA2 : A -> A2 = \a -> lin A2 (a ** {c2 = noPrep}) ;
mkA2 : A -> Prep -> A2 = \a,p -> lin A2 (a ** {c2 = p}) ;
} ;
mkV = overload {
@@ -504,39 +504,39 @@ oper
mkV : Str -> Str -> V = reg2V -- Nonfinite Indicative;Pres;('PSg', P2)
} ;
mkVV : V -> VV = \v -> v ;
mkVS : V -> VS = \v -> v ;
mkVQ : V -> VQ = \v -> v ;
mkVA : V -> VA = \v -> v ;
mkVV : V -> VV = \v -> lin VV v ;
mkVS : V -> VS = \v -> lin VS v ;
mkVQ : V -> VQ = \v -> lin VQ v ;
mkVA : V -> VA = \v -> lin VA v ;
mkV2 = overload {
mkV2 : V -> V2 = \v -> v ** {c2 = noPrep} ;
mkV2 : V -> Prep -> V2 = \v,p -> v ** {c2 = p} ;
mkV2 : V -> V2 = \v -> lin V2 (v ** {c2 = noPrep}) ;
mkV2 : V -> Prep -> V2 = \v,p -> lin V2 (v ** {c2 = p}) ;
} ;
mkV3 = overload {
mkV3 : V -> V3 = \v -> v ** {c2 = noPrep; c3 = noPrep} ;
mkV3 : V -> Prep -> Prep -> V3 = \v,p1,p2 -> v ** {c2 = p1; c3 = p2} ;
mkV3 : V -> V3 = \v -> lin V3 (v ** {c2 = noPrep; c3 = noPrep}) ;
mkV3 : V -> Prep -> Prep -> V3 = \v,p1,p2 -> lin V3 (v ** {c2 = p1; c3 = p2}) ;
} ;
mkV2A = overload {
mkV2A : V -> V2A = \v -> v ** {c2 = noPrep; c3 = noPrep} ;
mkV2A : V -> Prep -> Prep -> V2A = \v,p1,p2 -> v ** {c2 = p1; c3 = p2} ;
mkV2A : V -> V2A = \v -> lin V2A (v ** {c2 = noPrep; c3 = noPrep}) ;
mkV2A : V -> Prep -> Prep -> V2A = \v,p1,p2 -> lin V2A (v ** {c2 = p1; c3 = p2}) ;
} ;
mkV2S = overload {
mkV2S : V -> V2S = \v -> v ** {c2 = noPrep; c3 = noPrep} ;
mkV2S : V -> Prep -> Prep -> V2S = \v,p1,p2 -> v ** {c2 = p1; c3 = p2} ;
mkV2S : V -> V2S = \v -> lin V2S (v ** {c2 = noPrep; c3 = noPrep}) ;
mkV2S : V -> Prep -> Prep -> V2S = \v,p1,p2 -> lin V2S (v ** {c2 = p1; c3 = p2}) ;
} ;
mkV2Q = overload {
mkV2Q : V -> V2Q = \v -> v ** {c2 = noPrep; c3 = noPrep} ;
mkV2Q : V -> Prep -> Prep -> V2Q = \v,p1,p2 -> v ** {c2 = p1; c3 = p2} ;
mkV2Q : V -> V2Q = \v -> lin V2Q (v ** {c2 = noPrep; c3 = noPrep}) ;
mkV2Q : V -> Prep -> Prep -> V2Q = \v,p1,p2 -> lin V2Q (v ** {c2 = p1; c3 = p2}) ;
} ;
mkV2V = overload {
mkV2V : V -> V2V = \v -> v ** {c2 = noPrep; c3 = noPrep} ;
mkV2V : V -> Prep -> Prep -> V2V = \v,p1,p2 -> v ** {c2 = p1; c3 = p2} ;
mkV2V : V -> V2V = \v -> lin V2V (v ** {c2 = noPrep; c3 = noPrep}) ;
mkV2V : V -> Prep -> Prep -> V2V = \v,p1,p2 -> lin V2V (v ** {c2 = p1; c3 = p2}) ;
} ;
mkAdv : Str -> Adv = \s -> lin Adv {s=s} ;

View File

@@ -161,14 +161,14 @@ oper
verbExample : CatFin.Cl -> Str = \cl -> (S.mkUtt cl).s ;
{-
-} --# notpresent
inflVerb : CatFin.V -> Str = \verb0 ->
inflVerb : SVerb1 -> Str = \verb0 ->
let
verb = sverb2verbSep verb0 ;
vfin : ResFin.VForm -> Str = \f ->
verb.s ! f ;
nounNounHeading : Parameter -> Parameter -> Str = \n1,n2 ->
(S.mkUtt (G.PossNP (S.mkCN n1) (S.mkNP (snoun2nounSep n2)))).s ;
(S.mkUtt (G.PossNP (S.mkCN n1) (S.mkNP (lin N (snoun2nounSep n2))))).s ;
in
heading3 (nounNounHeading present_Parameter indicative_Parameter) ++
frameTable (

View File

@@ -258,7 +258,7 @@ lin PresPartAP vp = {
hasPrefix = False
} ;
lin PastPartAP vps = {
s = \\_,nf => preCompVP <vps : VP> (PastPartAct (AN nf)) ;
s = \\_,nf => preCompVP (lin VP vps) (PastPartAct (AN nf)) ;
p = vps.c2.s.p1 ;
hasPrefix = False
} ;

View File

@@ -406,10 +406,10 @@ mkVS = overload {
mkQuant = overload {
mkQuant : N -> Quant =
\noun -> heavyQuant {s1 = \\n,c => (snoun2nounBind noun).s ! NCase n c ; s2 = \\_ => [] ; isNum,isPoss,isNeg,isDef = False} ;
\noun -> lin Quant (heavyQuant {s1 = \\n,c => (snoun2nounBind noun).s ! NCase n c ; s2 = \\_ => [] ; isNum,isPoss,isNeg,isDef = False}) ;
mkQuant : N -> N -> Quant =
\sg,pl -> heavyQuant {s1 = table {Sg => \\c => (snoun2nounBind pl).s ! NCase Sg c ; Pl => \\c => (snoun2nounBind pl).s ! NCase Pl c} ;
s2 = \\_ => [] ; isNum,isPoss,isNeg,isDef = False} ;
\sg,pl -> lin Quant (heavyQuant {s1 = table {Sg => \\c => (snoun2nounBind pl).s ! NCase Sg c ; Pl => \\c => (snoun2nounBind pl).s ! NCase Pl c} ;
s2 = \\_ => [] ; isNum,isPoss,isNeg,isDef = False}) ;
} ;
mkInterj : Str -> Interj

View File

@@ -2084,14 +2084,14 @@ mkN = overload {
mkN : (nom,gen : Str) -> N = \nom,gen -> lin N (reg2N nom gen) ; -- nom;indef;sg gen;indef;sg
mkN : (nom,gen,pl : Str) -> Gender -> N = \loch,locha,lochan,g ->
mk5N loch loch locha lochan (palatalise loch) g ;
lin N (mk5N loch loch locha lochan (palatalise loch) g) ;
mkN : (base : Str) -> Gender -> N = \tunnag,g ->
let fm : Str -> Str -> Str = \fem,masc -> case g of {
Fem => fem ; Masc => masc } ;
tunnaig : Str = palatalise tunnag ;
tunnaige : Str = fm (tunnaig + "e") tunnaig ;
tunnagan : Str = fm (tunnag + "an") tunnaig ;
in mk5N tunnag tunnag tunnaige tunnagan tunnaig g
in lin N (mk5N tunnag tunnag tunnaige tunnagan tunnaig g)
} ;
mkN2 : LinN -> N2 = \n -> lin N2 n ** {c2=noPrep} ;

View File

@@ -291,7 +291,7 @@ concrete ExtraGer of ExtraGerAbs = CatGer **
lin
FocObj np cl =
let n = appPrepNP cl.c2 np in mkFoc n cl ;
let n = appPrepNP cl.c2 np in mkFoc n (lin Cl cl) ;
FocAdv adv cl = mkFoc adv.s cl ;
@@ -304,7 +304,7 @@ concrete ExtraGer of ExtraGerAbs = CatGer **
-- "froh ist sie dass er da ist"
-- "stolz ist sie auf ihn"
subj = mkSubject np vp.c1 ;
cl = mkClause subj.s subj.a vp
cl = lin Cl (mkClause subj.s subj.a vp)
in mkFoc adj cl ;
UseFoc t p f = {s = t.s ++ p.s ++ f.s ! t.m ! t.t ! t.a ! p.p} ;

View File

@@ -81,7 +81,7 @@ oper
} ;
mkIrregA : Str -> A = \str -> makeIrregA str ;
mkIrregA : Str -> A = \str -> lin A (makeIrregA str) ;
mkA2 : A -> Str -> A2 ;
mkA2 a str = a ** {c2=str ; lock_A2 = <>} ;
@@ -169,7 +169,7 @@ oper
-- mkV0 : V -> V0 ;
mkVS : V -> VS; -- e.g drna
mkVS v = v ;
mkVS v = lin VS v ;
-- mkV2S : V -> Prep -> V2S ;
mkVV : V -> VV = -- e.g cahna
\v -> lin VV (v ** {isAux = False});
@@ -184,7 +184,7 @@ oper
-- mkVA : V -> VA ;
-- mkV2A : V -> Prep -> V2A ;
mkVQ : V -> VQ ; -- e.g janna
mkVQ v = v ;
mkVQ v = lin VQ v ;
-- mkV2Q : V -> Prep -> V2Q ;
--
-- mkAS : A -> AS ;

View File

@@ -36,7 +36,7 @@ oper
mkLN : Str -> Number -> PN -- PN with a given number
} ;
mkGN : Str -> PN ; -- GN out of a string
mkGN : Str -> GN ; -- GN out of a string
mkSN : Str -> SN ; -- SN out of a string
--2 Adjectives
@@ -213,7 +213,7 @@ oper
} ;
mkA2 = overload {
mkA2 : A -> A2 = \a -> a ** {c2 = casePrep Nom ; isPost = False} ;
mkA2 : A -> A2 = \a -> lin A2 (a ** {c2 = casePrep Nom ; isPost = False}) ;
mkA2 : Str -> Prep -> A2 = \s,p ->
lin A2 ((mkAdj s) ** {c2 = p ; isPost = False}) ;
mkA2 : Str -> Case -> A2 = \s,c ->
@@ -230,7 +230,7 @@ oper
lin V (mkVerbFull sg1 sg2 sg3 pl1 pl2 pl3 inf) ;
} ;
copula = ResHun.copula ;
copula = lin V ResHun.copula ;
mkVS = overload {
mkVS : Str -> VS = \v -> lin VS (mkVerb v) ;
@@ -249,7 +249,7 @@ oper
mkV2 = overload {
mkV2 : (plain : Str) -> V2 = \v2 -> lin V2 (mkVerb2 v2) ;
mkV2 : V -> V2 = vtov2 ;
mkV2 : V -> V2 = \v -> lin V2 (vtov2 v) ;
} ;
mkVV = overload {

View File

@@ -403,7 +403,7 @@ resource ParadigmsIce = open
addAdv : A -> Str -> A = \a,adv -> a ** {adv = adv} ;
mkA2 : A -> Prep -> A2 = \adj,prep -> adj ** {c2 = prep} ;
mkA2 : A -> Prep -> A2 = \adj,prep -> lin A2 (adj ** {c2 = prep}) ;
--2 Verbs
@@ -744,9 +744,9 @@ resource ParadigmsIce = open
-- Two-place verbs need a preposition, except the special case with direct object.
-- (transitive verbs).
prepV2 : V -> Preposition -> V2 = \v,prep -> v ** {c2 = prep} ;
prepV2 : V -> Preposition -> V2 = \v,prep -> lin V2 (v ** {c2 = prep}) ;
prepV3 : V -> Preposition -> Preposition -> V3 = \v,p1,p2 -> v ** {c2 = p1 ; c3 = p2} ;
prepV3 : V -> Preposition -> Preposition -> V3 = \v,p1,p2 -> lin V3 (v ** {c2 = p1 ; c3 = p2}) ;
accPrep : Preposition = {s = []; c = Acc} ;

View File

@@ -143,16 +143,16 @@ oper
\\conj => glue (np.s ! Bare) (conjTable ! NStar ! conj ! np.p) ;
-- Versions with commas, no repeated conjunctions
baseNPcomma : NP -> NP -> ListNP = \x,y -> y ** {
baseNPcomma : NP -> NP -> ListNP = \x,y -> lin ListNP y ** {
firstNP = \\conj => x.s ! Bare ++ BIND ++ "," ;
} ;
consNPcomma : NP -> ListNP -> ListNP = \x,xs -> xs ** {
consNPcomma : NP -> ListNP -> ListNP = \x,xs -> lin ListNP xs ** {
firstNP = \\conj =>
x.s ! Bare ++ BIND ++ "," ++ xs.firstNP ! conj ;
} ;
conjNPcomma : Conj -> ListNP -> NP = \co,xs -> xs ** {
conjNPcomma : Conj -> ListNP -> NP = \co,xs -> lin NP xs ** {
s = \\nf => co.s1
++ xs.firstNP ! co.c
++ co.s2

View File

@@ -91,7 +91,7 @@ lin come_V = mkV "오다" ;
-- lin dig_V = mkV "" ;
-- lin dirty_A = mkA "" ;
-- lin distance_N3 = mkN "" ;
lin do_V2 = mkV2 do_V ;
lin do_V2 = mkV2 (lin V do_V) ;
-- lin doctor_N = mkN "" ;
-- lin dog_N = mkN "" ;
-- lin door_N = mkN "" ;
@@ -209,7 +209,7 @@ lin laugh_V = mkV "웃다" ;
-- lin leave_V2 = mkV2 "" ;
-- lin leg_N = mkN "" ;
-- lin lie_V = mkV "" ;
lin like_V2 = mkV2 (mkV "좋아" do_V) topic object ;
lin like_V2 = mkV2 (mkV "좋아" (lin V do_V)) topic object ;
-- lin listen_V2 = mkV2 "" ;
-- lin live_V = mkV "";
-- lin liver_N = mkN "" ;
@@ -319,7 +319,7 @@ lin shirt_N = mkN "셔츠" "벌" ;
-- lin shop_N = mkN "" ;
lin short_A = mkA "키가" small_A ; -- "height is small"
-- lin silver_N = mkN "" ;
lin sing_V = mkV "노래" do_V ;
lin sing_V = mkV "노래" (lin V do_V) ;
-- lin sister_N = mkN "" ;
-- lin sit_V = mkV "" ;
-- lin skin_N = mkN "" ;

View File

@@ -169,16 +169,16 @@ oper
= \x1,x2,x3,x4 -> lin V (mkVerbReg x1 x2 x3 x4) ;
} ;
copula = ResKor.copula ;
copula = lin V ResKor.copula ;
-- regV : Str -> Verb = \s -> case s of {
-- } ;
mkV2 = overload {
mkV2 : (plain : Str) -> V2 = \v2 -> lin V2 (mkVerb2 v2) ;
mkV2 : V -> V2 = vtov2 ;
mkV2 : V -> V2 = \v -> lin V2 (vtov2 v) ;
mkV2 : V -> (subj,obj : CaseParticle) -> V2 = \v,sc,c2 ->
vtov2 v ** {sc = sc ; c2 = c2} ;
lin V2 (vtov2 v ** {sc = sc ; c2 = c2}) ;
} ;
mkV3 = overload {

View File

@@ -86,8 +86,8 @@ oper
V0 : Type = V;
mkV0 = overload {
mkV0 : V -> V0 = \v -> lin V0 v ; -- Same as in english, don't know if it's working
mkV0 : Str -> V0 = \v -> lin V0 (impersonalVerb v) ;
mkV0 : V -> V0 = \v -> lin V v ; -- Same as in english, don't know if it's working
mkV0 : Str -> V0 = \v -> lin V (impersonalVerb v) ;
} ;
mkV2 = overload {
@@ -154,7 +154,7 @@ oper
AV : Type = A ;
mkAV : A -> AV = \a -> lin AV a ;
mkLN : N -> Number -> LN = \noun,num -> lin PN (noun ** { s = noun.s ! num ; n = num } ) ;
mkLN : N -> Number -> LN = \noun,num -> lin LN (noun ** { s = noun.s ! num ; n = num } ) ;
mkGN = overload {
mkGN : Str -> GN = \s -> lin GN {s = s ; g = Male}; -- default gender male

View File

@@ -18,7 +18,7 @@ lin
ImpVP vp = { s = \\pol,num => vp.v.s ! pol ! (VImp num) ++ vp.compl ! (AgrP2 num Masc) } ;
SlashVP np vp = mkClause np vp ** { prep = vp.rightVal } ;
SlashVP np vp = mkClause np (lin VP vp) ** { prep = vp.rightVal } ;
AdvSlash slash adv = {
s = \\m,p => slash.s ! m ! p ++ adv.s ;

View File

@@ -10,6 +10,22 @@ oper
-- defined in $ResSom$.
noPrep : Prep = mkPrep "" ;
emptyPrep : Prep = lin Prep {
s = [] ;
obj = \\_ => [] ;
prepType = EmptyPrep ;
} ;
datPrep : Prep = mkPrep "kepada" ;
-- direct object: "hits him" -> "memukul+nya"
dirPrep : Prep = lin Prep {
s = [] ;
obj = table {
P1 => BIND ++ "ku" ;
P2 => BIND ++ "mu" ;
P3 => BIND ++ "nya" } ;
prepType = DirObj ;
} ;
--2 Nouns
@@ -192,9 +208,16 @@ oper
mkV2S = overload {
mkV2S : Str -> V2S = \v -> lin V2S (mkVerb2 (regVerb v Meng) dirPrep) ;
mkV2S : V -> Prep -> V2S = \v,p -> lin V22 (mkVerb2 v p)
mkV2S : V -> Prep -> V2S = \v,p -> lin V2S (mkVerb2 v p)
} ;
mkPrep : Str -> Prep = \dengan -> lin Prep {
s = dengan ;
obj = \\p => dengan + poss2str (Poss p) ;
prepType = OtherPrep ;
} ;
-- lin like_V2 = let like' : V2 = mkV2 "suka" in like' ** {
-- s = table {Passive => "disukai" ; _ => "suka"} ;
-- } ;

View File

@@ -167,31 +167,6 @@ oper
prepType : PrepType ; -- TODO rename, the name is confusing
} ;
mkPrep : Str -> Preposition = \dengan -> {
s = dengan ;
obj = \\p => dengan + poss2str (Poss p) ;
prepType = OtherPrep ;
} ;
-- direct object: "hits him" -> "memukul+nya"
dirPrep : Preposition = {
s = [] ;
obj = table {
P1 => BIND ++ "ku" ;
P2 => BIND ++ "mu" ;
P3 => BIND ++ "nya" } ;
prepType = DirObj ;
} ;
-- truly empty
emptyPrep : Preposition = {
s = [] ;
obj = \\_ => [] ;
prepType = EmptyPrep ;
} ;
datPrep : Preposition = mkPrep "kepada" ;
applyPrep : Preposition -> NounPhrase -> Str = \prep,np ->
case <np.a, prep.prepType> of {
<IsPron p,OtherPrep> => prep.obj ! p ++ np.empty ;

View File

@@ -74,9 +74,9 @@ concrete QuestionNep of Question = CatNep ** open ResNep, Prelude in {
CompIAdv a = a ;
CompIP p = ss (p.s ! Nom) ;
AdvIAdv i a = {s = i.s ++ a.s} ;
AdvQVP vp iadv = insertObj (\\_ => iadv.s) vp ;
AddAdvQVP qvp iadv = insertObj (\\_ => iadv.s) qvp ;
ComplSlashIP vpslash ip = insertObj (\\_ => ip.s ! Nom) vpslash ;
AdvQVP vp iadv = lin VP (insertObj (\\_ => iadv.s) vp) ;
AddAdvQVP qvp iadv = lin VP (insertObj (\\_ => iadv.s) qvp) ;
ComplSlashIP vpslash ip = lin VP (insertObj (\\_ => ip.s ! Nom) vpslash) ;
--QuestQVP : IP -> QVP -> QCl ; -- who buys what where
QuestQVP ip qvp =

View File

@@ -33,6 +33,6 @@ lin
{s = "بگذارید" ++ np2str np ++ showVPH (VSubj Pos np.a) np.a vp};
oper
existVerb : V2 = mkV2 (mkV "وجود" haveVerb) noPrep ;
existVerb : V2 = mkV2 (mkV "وجود" (lin V haveVerb)) noPrep ;
}

View File

@@ -164,11 +164,11 @@ oper
mkVV : Str -> VV -- Predictable VV, subjunctive complement, is auxiliary.
= \s -> lin VV (regV s ** {isAux = True ; compl = subjunctive ; isDef = False}) ;
mkVV : V -> VV -- takes its VP complement in subjunctive. Is auxiliary.
= \v -> v ** {isAux = True ; compl = subjunctive ; isDef = False} ;
= \v -> lin VV (v ** {isAux = True ; compl = subjunctive ; isDef = False}) ;
mkVV : VVForm -> V -> VV -- takes its VP complement in the given VVForm
= \vvf,v -> v ** {isAux = True ; compl = vvf ; isDef = False} ;
= \vvf,v -> lin VV (v ** {isAux = True ; compl = vvf ; isDef = False}) ;
mkVV : (isAux : Bool) -> VVForm -> V -> VV -- takes its VP complement in the given VVForm. Whether it's auxiliary (T/F) given as the first argument.
= \isAux,vvf,v -> v ** {isAux = isAux ; compl = vvf ; isDef = False}
= \isAux,vvf,v -> lin VV (v ** {isAux = isAux ; compl = vvf ; isDef = False})
} ;
defVV : VV -> VV = \vv -> vv ** {isDef=True} ;
@@ -282,19 +282,19 @@ oper
mkN = overload {
mkN : (sg : Str) -> N -- Takes singular form, returns a noun with ها as the plural form.
= \sg -> mkN01 sg inanimate ;
= \sg -> lin N (mkN01 sg inanimate) ;
mkN : (sg,pl : Str) -> N -- Takes singular and plural forms. Use for ان or its allomorphs, and loanwords with Arabic plural.
= \sg,pl -> M.mkN sg pl inanimate ;
= \sg,pl -> lin N (M.mkN sg pl inanimate) ;
mkN : (possStem : Str) -> N -> N -- Noun with an unexpected possessive stem, e.g. مه where ه is a consonant, not vowel.
= \ps,n -> possStemN ps n ;
= \ps,n -> lin N (possStemN ps n) ;
-- hidden from API
mkN : (sg : Str) -> Animacy -> N -- Takes singular form and animacy. Inanimate plural ها. Animate plural ان or an allomorph of it (یان or گان) depending on the singular form.
= \sg,ani -> case ani of {
Inanimate => mkN01 sg ani ;
Animate => mkN02 sg ani } ;
Inanimate => lin N (mkN01 sg ani) ;
Animate => lin N (mkN02 sg ani) } ;
mkN : (sg,pl : Str) -> Animacy -> N -- Worst-case constructor: takes singular and plural forms and animacy. Use for e.g. loanwords with Arabic plural, or animate nouns with ها as plural.
= \sg,pl,ani -> M.mkN sg pl ani
= \sg,pl,ani -> lin N (M.mkN sg pl ani)
} ;
possStemN : Str -> N -> N = \possStem,n -> n ** {
@@ -304,18 +304,18 @@ oper
} ;
mkN01 : (sg : Str) -> Animacy -> Noun ; -- Takes singular form and animacy, forms plural with ها
mkN01 : (sg : Str) -> Animacy -> N ; -- Takes singular form and animacy, forms plural with ها
mkN01 sg ani =
let pl : Str = case last sg of {
--"د"|"ذ"|"ر"|"ز"|"ژ" => sg + "ها" ; -- these letters are separated by default
_ => zwnj sg "ها" } ; -- Using zero-width non-joiner, defined in MorphoPes
in M.mkN sg pl ani ;
in lin N (M.mkN sg pl ani) ;
mkN02 : (sg : Str) -> Animacy -> Noun ; -- Takes singular form and animacy, pattern matches singular and forms plural with either گان, یان or ان
mkN02 : (sg : Str) -> Animacy -> N ; -- Takes singular form and animacy, pattern matches singular and forms plural with either گان, یان or ان
mkN02 str ani = case last str of {
"ه" => M.mkN str (init str + "گان") ani ;
("ا"|"و") => M.mkN str (str + "یان") ani ;
_ => M.mkN str (str + "ان") ani
"ه" => lin N (M.mkN str (init str + "گان") ani) ;
("ا"|"و") => lin N (M.mkN str (str + "یان") ani) ;
_ => lin N (M.mkN str (str + "ان") ani)
};
mk2Conj : Str -> Str -> Number -> Conj = \x,y,n ->
@@ -396,7 +396,7 @@ oper
=> {s = [] ; ra = ra ; mod=Bare ; isPrep = False} ;
prep => {s = prep ; ra = [] ; mod=Bare ; isPrep = True}
} ;
noPrep = prepOrRa [] ;
noPrep : Prep = lin Prep (prepOrRa []) ;
-- NB. The 'mod' field has different meaning for verbs and N2s.
ezafeForN2 = {s = [] ; ra = [] ; mod=Ezafe ; isPrep = False} ;
@@ -427,11 +427,11 @@ oper
mkQuant = overload {
-- mkQuant : Pron -> Quant = \p -> {s = \\_,_,c => p.s!c ;a = p.a ; lock_Quant = <>};
mkQuant : Str -> Str -> Quant -- hidden from public API
= \sg,pl -> makeQuant sg pl Bare False;
= \sg,pl -> lin Quant (makeQuant sg pl Bare False);
mkQuant : Str -> Str -> (isNeg : Bool) -> Quant -- hidden from public API
= \sg,pl,isneg -> makeQuant sg pl Bare isneg;
= \sg,pl,isneg -> lin Quant (makeQuant sg pl Bare isneg);
mkQuant : Str -> Str -> Mod -> (isNeg : Bool) -> Quant -- hidden from public API
= \sg,pl,mod,isneg -> makeQuant sg pl mod isneg;
= \sg,pl,mod,isneg -> lin Quant (makeQuant sg pl mod isneg);
} ;
}

View File

@@ -209,6 +209,6 @@ resource AdjectiveMorphoPol = open CatPol, ResPol, Prelude, (Predef=Predef) in {
};
addComplToAdj : A -> Str -> Case -> A2 ;
addComplToAdj a s c = a ** {c = mkCompl s c } ;
addComplToAdj a s c = lin A2 (a ** {c = mkCompl s c}) ;
}

View File

@@ -26,10 +26,10 @@ oper
mkN2 n = mkFun n nullPrep ;
mkFun : N -> Complement -> N2;
mkFun f c = f ** { c = c } ;
mkFun f c = lin N2 (f ** { c = c }) ;
mkN3 : N -> Complement -> Complement -> N3;
mkN3 f c1 c2 = f ** { c1 = c1 ; c2 = c2 };
mkN3 f c1 c2 = lin N3 (f ** { c1 = c1 ; c2 = c2}) ;
-- Prepositions

View File

@@ -415,7 +415,7 @@ resource VerbMorphoPol = open CatPol, ResPol, Prelude, (Predef=Predef), (Adj=Adj
dirV3 : V -> V3; -- a typical case ie. "zabrać", "dać"
dirV3 v = mkV3 v "" "" Acc Dat;
indicative_form : V -> Bool -> Polarity -> Tense * Anteriority * GenNum * Person => Str;
indicative_form : Verb -> Bool -> Polarity -> Tense * Anteriority * GenNum * Person => Str;
indicative_form verb imienne pol =
case imienne of {True => imienne_form verb pol; False =>
let nie = case pol of { Pos => "" ; Neg => "nie" }; in
@@ -433,7 +433,7 @@ resource VerbMorphoPol = open CatPol, ResPol, Prelude, (Predef=Predef), (Adj=Adj
}
};
imienne_form : V -> Polarity -> Tense * Anteriority * GenNum * Person => Str;
imienne_form : Verb -> Polarity -> Tense * Anteriority * GenNum * Person => Str;
imienne_form verb pol =
let byc = (case verb.asp of { Perfective => conj3 "zostać"; _ => conj1 "być" }).s; in
let zostac = (case verb.asp of { Imperfective => conj1 "być"; _ => conj3 "zostać" }).s; in
@@ -461,7 +461,7 @@ resource VerbMorphoPol = open CatPol, ResPol, Prelude, (Predef=Predef), (Adj=Adj
<Pl, P3> => "będą"
};
imperative_form : V -> Bool -> Polarity -> GenNum -> Person -> Str;
imperative_form : Verb -> Bool -> Polarity -> GenNum -> Person -> Str;
imperative_form verb imienne pol gn p =
case imienne of {
True =>
@@ -493,7 +493,7 @@ resource VerbMorphoPol = open CatPol, ResPol, Prelude, (Predef=Predef), (Adj=Adj
}
};
infinitive_form : V -> Bool -> Polarity -> GenNum -> Str;
infinitive_form : Verb -> Bool -> Polarity -> GenNum -> Str;
infinitive_form verb imienne pol gn =
case imienne of {
True =>

View File

@@ -22,13 +22,13 @@ lin
what_name_QCl x = mkQCl how_IAdv (mkCl (lin NP x) (reflV (mkV "chamar"))) ;
how_old_QCl x = mkQCl (mkIP how8many_IDet L.year_N) x have_V2 ;
how_far_QCl x = mkQCl (lin IAdv (ss "a que distância")) (mkCl x D.stare_V) ;
how_far_QCl x = mkQCl (lin IAdv (ss "a que distância")) (mkCl x (lin V D.stare_V)) ;
-- some more things
weather_adjCl ap = mkCl (mkVP (mkVA (mkV (fazer_Besch "fazer"))) (lin AP ap)) ;
is_right_VP = mkVP (mkVA D.stare_V) (mkAP (mkA "certo")) ;
is_wrong_VP = mkVP (mkVA D.stare_V) (mkAP (mkA "errado")) ;
is_right_VP = mkVP (mkVA (lin V D.stare_V)) (mkAP (mkA "certo")) ;
is_wrong_VP = mkVP (mkVA (lin V D.stare_V)) (mkAP (mkA "errado")) ;
n_units_AP card cn a = mkAP (lin AdA (mkUtt (mkNP <lin Card card : Card> (lin CN cn))))
(lin A a) ;

View File

@@ -36,7 +36,7 @@ concrete LexiconPnb of Lexicon = CatPnb **
bread_N = mkN03 "روتی" ;
break_V2 = mkV2 (mkV "توڑنا") ;
broad_A = mkAdj1 "كھلا" ;
brother_N2 = mkN2 (mkN01 "پرا") (mkPrep "كا") "كے" ; --not correct
brother_N2 = mkN2 (lin N (mkN01 "پرا")) (mkPrep "كا") "كے" ; --not correct
brown_A = mkAdj1 "نسواری" ;
-- butter_N = mkN "مكھن" ;
buy_V2 = mkV2 (mkV "خریدنا");
@@ -73,7 +73,7 @@ concrete LexiconPnb of Lexicon = CatPnb **
empty_A = mkAdj1 "خالی" ;
-- enemy_N = mkN "دشمن" ;
-- factory_N = mkN "كارخانہ" ;
father_N2 = mkN2 (mkN01 "ابا") (mkPrep "دا") "دے" ;
father_N2 = mkN2 (lin N (mkN01 "ابا")) (mkPrep "دا") "دے" ;
fear_VS = mkV "ڈرنا";
find_V2 = mkV2 (mkV "پانا") ;
fish_N = mkN03 "مچھلی" ;
@@ -124,7 +124,7 @@ concrete LexiconPnb of Lexicon = CatPnb **
meat_N = mkN02 "گوشت" ;
-- milk_N = mkN "دودھ" ;
moon_N = mkN02 "چن" ;
mother_N2 = mkN2 (mkN05 "ماں") (mkPrep "دی") "ڈے"; -- not covered need to be discussed
mother_N2 = mkN2 (lin N (mkN05 "ماں")) (mkPrep "دی") "ڈے"; -- not covered need to be discussed
mountain_N = mkN03 "پاڑی" ;
-- music_N = mkN "موسیقی" ;
narrow_A = mkAdj1 "باریك" ;

View File

@@ -58,7 +58,7 @@ mkPN = overload {
\s1,s2,s3,s4,n,g -> let p = mkIntPronForm s1 s2 s3 s4 in { s = p.s ; n = n ; g = g ; lock_IP = <>};
-- AdN
mkAdN : Str -> AdN = \s -> ss s ;
mkAdN : Str -> AdN = \s -> lin AdN (ss s) ;
--2 Adjectives

View File

@@ -340,7 +340,7 @@ incomplete concrete ExtendRomanceFunctor of Extend =
passVPSlash vps agent = let
auxvp = predV auxPassive
in
vps ** {
lin VP vps ** {
s = auxvp.s ;
agr = auxvp.agr ;
comp = \\a => (let agr = complAgr a in vps.s.s ! VPart agr.g agr.n) ++ vps.comp ! a ++ agent ;

View File

@@ -40,17 +40,17 @@ oper
};
mkV = overload {
mkV : Str -> Verb
mkV : Str -> V
= \root -> lin V (smartVerb root); --{s =root; pres =[]; perf = []; morphs= mkVerbMorphs; isRegular = True}; --only those verbs whose conjugation involves change of last letter and are done in the same way in both runyankore and rukiga
mkV : Str -> Str ->Str -> Verb
mkV : Str -> Str ->Str -> V
= \root, restPres, restPerf ->lin V (mkVerb root restPres restPerf);
mkV : Str -> Str ->Str ->Str -> Bool -> Verb
mkV : Str -> Str ->Str ->Str -> Bool -> V
= \root, restPres, restPerf, p, bool ->lin V (mkVerbV2X root restPres restPerf p bool);
};
mkV2 = overload {
mkV2 : Str -> V2 = \root ->dirV2 (smartVerb root); --** {comp =[] ; isCompN2 = False};
mkV2 : Str -> Str ->Str -> V2 = \root, s1, s2 ->dirV2 (mkVerb root s1 s2); --** {comp =[] ; isCompN2 = False};
mkV2 : Str -> V2 = \root ->dirV2 (lin V (smartVerb root)); --** {comp =[] ; isCompN2 = False};
mkV2 : Str -> Str ->Str -> V2 = \root, s1, s2 ->dirV2 (lin V (mkVerb root s1 s2)); --** {comp =[] ; isCompN2 = False};
};
mkV3 = overload {
mkV3 : Str -> Verb3 = \root ->mkV2 root ** {comp2 =[]};
@@ -213,7 +213,7 @@ mkInterj : Str -> Interj
mkV0 : V -> V;
mkV0 v = v ;
mkA2 : Str -> Position -> Bool -> Bool ->Bool-> A2V = \a2, pos, isProper, isPrep,isNeg ->
lin A2V ((mkAdjective a2 pos isProper isPrep isNeg) ** {c2 = ""; isPre = True});
lin A2 (mkAdjective a2 pos isProper isPrep isNeg) ** {c2 = ""; isPre = True};
--mkA2V : A -> A2V;
--mkA2V a = lin A2V (a * {c2 = ""; isPre = True});
mkA2V : Str -> Position -> Bool -> Bool ->Bool-> A2 =\a2, pos, isProper, isPrep,isNeg -> lin A2 ((mkAdjective a2 pos isProper isPrep isNeg) ** {c2 = ""; isPre = True});

View File

@@ -163,7 +163,7 @@ lin
oper
{-
-} --# notpresent
inflVerb : CatRus.V -> Str = \v ->
inflVerb : VerbForms -> Str = \v ->
let fut : Agr=>Str = \\a => verbFutAgree v a in
let pres : Agr=>Str = \\a => verbPresAgree v a in
let past : Agr=>Str = \\a => verbPastAgree v a "" in

View File

@@ -292,7 +292,7 @@ oper
compoundN = overload {
compoundN : A -> N -> N
= \a, n -> applyMaybeNumber
= \a, n -> lin N (applyMaybeNumber
{snom = case n.g of {
Fem => preOrPost (notB a.p) a.fsnom n.snom ;
Masc => preOrPost (notB a.p) a.msnom n.snom ;
@@ -349,7 +349,7 @@ oper
g=n.g ;
rel=(guessAdjectiveForms nonExist) ;
rt=GenType
} ;
}) ;
compoundN : N -> Str -> N
= \n, adv -> n ** {
@@ -592,7 +592,7 @@ oper
mkA : Str -> Str -> Z.ZAIndex -> ShortFormPreference -> A
= \nom, comp, zi, spf -> lin A (makeAdjectiveFormsUseIndex nom comp zi spf) ;
mkA : PronForms -> A
= \pf -> pronToAdj pf ;
= \pf -> lin A (pronToAdj pf) ;
mkA : A -> Str -> A -> A
= \a1,link,a2 -> lin A (mkCompoundA a1 link a2) ;
mkA : V -> Voice -> Tense -> A

View File

@@ -1,7 +1,6 @@
--# -path=.:prelude:alltenses
concrete LexiconSnd of Lexicon = CatSnd **
--open ResSnd, Prelude in {
open ParadigmsSnd,MorphoSnd, Prelude in {
flags

View File

@@ -8,7 +8,7 @@
---- syntax. To build a lexicon, it is better to use $ParadigmsSnd$, which
---- gives a higher-level access to this module.
--
resource MorphoSnd = ResSnd ** open Prelude,Predef in {
resource MorphoSnd = ResSnd ** open Prelude,Predef,CatSnd in {
flags optimize=all ;
@@ -17,8 +17,8 @@ resource MorphoSnd = ResSnd ** open Prelude,Predef in {
----2 Nouns
oper
mkN : (x1,_,_,_,_,_,_,x8 : Str) -> Gender -> Noun =
\sd,so,sv,sa, pd,po,pv,pa, g -> {
mkN : (x1,_,_,_,_,_,_,x8 : Str) -> Gender -> N =
\sd,so,sv,sa, pd,po,pv,pa, g -> lin N {
s = table {
Sg => table {
Dir => sd ;
@@ -39,7 +39,7 @@ oper
-- 1. msculine: chokro, kuto, hat
mkN01 : Str -> Noun ;
mkN01 : Str -> N ;
mkN01 chokro = let chokr = (tk 1 chokro)
in mkN (chokro) (chokr+"ی") (chokr+"ا") (chokr+"ا")
(chokr+"ا") (chokr+"ن") (chokr+"ا") (chokr+"ا")
@@ -47,81 +47,81 @@ oper
-- 2. karkhano
mkN02 : Str -> Noun ;
mkN02 : Str -> N ;
mkN02 karkhano =let karkhan = (tk 1 karkhano)
in mkN (karkhano) (karkhan+"ی") (karkhan+"ا") (karkhano)
(karkhan+"ا") (karkhan+"ن") (karkhan+"و") (karkhan+"ا")
Fem ;
-- 3. gher, shehar
mkN03 : Str -> Noun ;
mkN03 : Str -> N ;
mkN03 gher = mkN (gher) (gher) (gher) (gher)
(gher) (gher+"ن") (gher+"و") (gher)
Masc ;
-- 4. paki, mez, gah
mkN04 : Str -> Noun ;
mkN04 : Str -> N ;
mkN04 paki = mkN (paki) (paki) (paki) (paki)
(paki) (paki+"ن") (paki) (paki)
Fem ;
-- 5. msculine: bar, hotel, pathar
mkN05 : Str -> Noun ;
mkN05 : Str -> N ;
mkN05 bar = mkN (bar) (bar) (bar) (bar)
(bar) (bar+"ن") (bar+"و") (bar)
Masc ;
-- 6. pe
mkN06 : Str -> Noun ;
mkN06 : Str -> N ;
mkN06 pe = mkN (pe) (pe) (pe) (pe)
(pe+"۶ر") (pe+"۶رن") (pe+"۶رو") (pe+"۶ر")
Masc ;
-- 7. Feminine : ma
mkN07 : Str -> Noun ;
mkN07 : Str -> N ;
mkN07 ma = mkN (ma) (ma) (ma) (ma)
(ma+"۶ر") (ma+"۶رن") (ma+"۶رو") (ma+"۶ر")
Fem ;
-- 8. msculine: topi, takre
mkN08 : Str -> Noun ;
mkN08 : Str -> N ;
mkN08 topi = mkN (topi) (topi) (topi) (topi)
(topi+"ون") (topi+"ن") (topi+"و") (topi+"ون")
Masc ;
-- 9. Feminine: bere, bili, kurse
mkN09 : Str -> Noun ;
mkN09 : Str -> N ;
mkN09 bili = mkN (bili) (bili) (bili) (bili)
(bili+"ون") (bili+"ن") (bili+"ن") (bili+"ون")
Fem ;
-- 10. msculine: bha
mkN010 : Str -> Noun ;
mkN010 : Str -> N ;
mkN010 bha = mkN (bha) (bha) (bha) (bha)
(bha+"ر") (bha+"رن") (bha+"رو") (bha+"ر")
Masc ;
-- 11. Feminine: bhen
mkN11 : Str -> Noun ;
mkN11 : Str -> N ;
mkN11 bhen = let bhe= (tk 1 bhen)
in mkN (bhen) (bhen) (bhen) (bhen)
(bhe+"نر") (bhe+"نرن") (bhen+"ون") (bhe+"نر")
Fem ;
--12. msculine: raja, darya
mkN12 : Str -> Noun ;
mkN12 : Str -> N ;
mkN12 raja = mkN (raja) (raja) (raja) (raja)
(raja) (raja+"۶ن") (raja+"۶و") (raja)
Masc ;
-- 13. msculine: fan, son, kher,
mkN13 : Str -> Noun ;
mkN13 : Str -> N ;
mkN13 son = mkN (son) (son) (son) (son)
(son) (son) (son) (son)
Masc ;
-- 14. Feminine: pen, samand
mkN14 : Str -> Noun ;
mkN14 : Str -> N ;
mkN14 pen = mkN (pen) (pen) (pen) (pen)
(pen) (pen) pen ""
Fem ;

View File

@@ -60,7 +60,7 @@ mkPN = overload {
\s1,s2,s3,s4,n,g -> let p = mkIntPronForm s1 s2 s3 s4 in { s = p.s ; n = n ; g = g ; lock_IP = <>};
-- AdN
mkAdN : Str -> AdN = \s -> ss s ;
mkAdN : Str -> AdN = \s -> lin AdN (ss s) ;
--2 Adjectives

View File

@@ -8,7 +8,7 @@
---- syntax. To build a lexicon, it is better to use $ParadigmsSnd$, which
---- gives a higher-level access to this module.
--
resource MorphoSnd = ResSnd ** open Prelude,Predef in {
resource MorphoSnd = ResSnd ** open Prelude,Predef,CatSnd in {
flags optimize=all ;
@@ -17,8 +17,8 @@ resource MorphoSnd = ResSnd ** open Prelude,Predef in {
----2 Nouns
oper
mkN : (x1,_,_,_,_,_,_,x8 : Str) -> Gender -> Noun =
\sd,so,sv,sa, pd,po,pv,pa, g -> {
mkN : (x1,_,_,_,_,_,_,x8 : Str) -> Gender -> N =
\sd,so,sv,sa, pd,po,pv,pa, g -> lin N {
s = table {
Sg => table {
Dir => sd ;
@@ -39,7 +39,7 @@ oper
-- 1. msculine: chokro, kuto, hat
mkN01 : Str -> Noun ;
mkN01 : Str -> N ;
mkN01 chokro = let chokr = (tk 1 chokro)
in mkN (chokro) (chokr+"y") (chokr+"a") (chokr+"a")
(chokr+"a") (chokr+"n") (chokr+"a") (chokr+"a")
@@ -47,81 +47,81 @@ oper
-- 2. karkhano
mkN02 : Str -> Noun ;
mkN02 : Str -> N ;
mkN02 karkhano =let karkhan = (tk 1 karkhano)
in mkN (karkhano) (karkhan+"y") (karkhan+"a") (karkhano)
(karkhan+"a") (karkhan+"n") (karkhan+"W") (karkhan+"a")
Fem ;
-- 3. gher, shehar
mkN03 : Str -> Noun ;
mkN03 : Str -> N ;
mkN03 gher = mkN (gher) (gher) (gher) (gher)
(gher) (gher+"n") (gher+"W") (gher)
Masc ;
-- 4. paki, mez, gah
mkN04 : Str -> Noun ;
mkN04 : Str -> N ;
mkN04 paki = mkN (paki) (paki) (paki) (paki)
(paki) (paki+"n") (paki) (paki)
Fem ;
-- 5. msculine: bar, hotel, pathar
mkN05 : Str -> Noun ;
mkN05 : Str -> N ;
mkN05 bar = mkN (bar) (bar) (bar) (bar)
(bar) (bar+"n") (bar+"W") (bar)
Masc ;
-- 6. pe
mkN06 : Str -> Noun ;
mkN06 : Str -> N ;
mkN06 pe = mkN (pe) (pe) (pe) (pe)
(pe+"e'r") (pe+"e'rn") (pe+"e'rW") (pe+"e'r")
Masc ;
-- 7. Feminine : ma
mkN07 : Str -> Noun ;
mkN07 : Str -> N ;
mkN07 ma = mkN (ma) (ma) (ma) (ma)
(ma+"e'r") (ma+"e'rn") (ma+"e'rW") (ma+"e'r")
Fem ;
-- 8. msculine: topi, takre
mkN08 : Str -> Noun ;
mkN08 : Str -> N ;
mkN08 topi = mkN (topi) (topi) (topi) (topi)
(topi+"Wn") (topi+"n") (topi+"W") (topi+"Wn")
Masc ;
-- 9. Feminine: bere, bili, kurse
mkN09 : Str -> Noun ;
mkN09 : Str -> N ;
mkN09 bili = mkN (bili) (bili) (bili) (bili)
(bili+"Wn") (bili+"n") (bili+"n") (bili+"Wn")
Fem ;
-- 10. msculine: bha
mkN010 : Str -> Noun ;
mkN010 : Str -> N ;
mkN010 bha = mkN (bha) (bha) (bha) (bha)
(bha+"r") (bha+"rn") (bha+"rW") (bha+"r")
Masc ;
-- 11. Feminine: bhen
mkN11 : Str -> Noun ;
mkN11 : Str -> N ;
mkN11 bhen = let bhe= (tk 1 bhen)
in mkN (bhen) (bhen) (bhen) (bhen)
(bhe+"nr") (bhe+"nrn") (bhen+"Wn") (bhe+"nr")
Fem ;
--12. msculine: raja, darya
mkN12 : Str -> Noun ;
mkN12 : Str -> N ;
mkN12 raja = mkN (raja) (raja) (raja) (raja)
(raja) (raja+"e'n") (raja+"e'W") (raja)
Masc ;
-- 13. msculine: fan, son, kher,
mkN13 : Str -> Noun ;
mkN13 : Str -> N ;
mkN13 son = mkN (son) (son) (son) (son)
(son) (son) (son) (son)
Masc ;
-- 14. Feminine: pen, samand
mkN14 : Str -> Noun ;
mkN14 : Str -> N ;
mkN14 pen = mkN (pen) (pen) (pen) (pen)
(pen) (pen) pen ""
Fem ;

View File

@@ -38,7 +38,7 @@ oper
compoundN : N -> Str -> N = \noun,adv -> noun ** {s = \\c,n => noun.s ! c ! n ++ adv} ;
} ;
mkN2 : N -> Prep -> N2 = \n,c -> n ** {c=c} ;
mkN2 : N -> Prep -> N2 = \n,c -> lin N2 (n ** {c=c}) ;
--All masculine forms (except those with long pluralstem) are formed here.
--Takes the baseform + the genitive singular form + animacy.
@@ -398,11 +398,11 @@ oper
} ;
mkV3 = overload {
mkV3 : V -> V3 = \v -> lin V2 (v ** {c2 = lin Prep {s=""; c=Acc}; c3 = lin Prep {s=""; c=Acc}}) ;
mkV3 : V -> Case -> Case -> V3 = \v,c2,c3 -> lin V2 (v ** {c2 = lin Prep {s=""; c=c2}; c3 = lin Prep {s=""; c=c3}}) ;
mkV3 : V -> Case -> Prep -> V3 = \v,c2,p3 -> lin V2 (v ** {c2 = lin Prep {s=""; c=c2}; c3 = p3}) ;
mkV3 : V -> Prep -> Case -> V3 = \v,p2,c3 -> lin V2 (v ** {c2 = p2 ; c3 = lin Prep {s=""; c=c3}}) ;
mkV3 : V -> Prep -> Prep -> V3 = \v,p2,p3 -> lin V2 (v ** {c2 = p2 ; c3 = p3}) ;
mkV3 : V -> V3 = \v -> lin V3 (v ** {c2 = lin Prep {s=""; c=Acc}; c3 = lin Prep {s=""; c=Acc}}) ;
mkV3 : V -> Case -> Case -> V3 = \v,c2,c3 -> lin V3 (v ** {c2 = lin Prep {s=""; c=c2}; c3 = lin Prep {s=""; c=c3}}) ;
mkV3 : V -> Case -> Prep -> V3 = \v,c2,p3 -> lin V3 (v ** {c2 = lin Prep {s=""; c=c2}; c3 = p3}) ;
mkV3 : V -> Prep -> Case -> V3 = \v,p2,c3 -> lin V3 (v ** {c2 = p2 ; c3 = lin Prep {s=""; c=c3}}) ;
mkV3 : V -> Prep -> Prep -> V3 = \v,p2,p3 -> lin V3 (v ** {c2 = p2 ; c3 = p3}) ;
} ;
mkVA : V -> VA ;
@@ -442,7 +442,7 @@ oper
mkA : (x1,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,x166 : Str) -> A = worstA ;
} ;
mkA2 : A -> Prep -> A2 = \a,c -> a ** {c=c} ;
mkA2 : A -> Prep -> A2 = \a,c -> lin A2 (a ** {c=c}) ;
irregA : (_,_,_,_,_,_ :Str) -> A = \masc,fem,neut,mascC,femC,neutC -> lin A {
s = table {

View File

@@ -226,7 +226,7 @@ concrete NounSom of Noun = CatSom ** open ResSom, Prelude in {
UseN,UseN2 = ResSom.useN ;
-- : N2 -> NP -> CN ; -- Sahra hooyadeed
ComplN2 n2 np = genModCN (useN n2) np ;
ComplN2 n2 np = genModCN (lin CN (useN n2)) np ;
{-
-- : N3 -> NP -> N2 ; -- distance from this city (to Paris)

View File

@@ -219,7 +219,7 @@ oper
mkV : Str -> V -> V = \s,v -> lin V (prefixV s v)
} ;
copula = ResSom.copula ;
copula = lin V (ResSom.copula) ;
regV : Str -> Verb = \s -> case s of {
_ + #c + #c + "o" => mkVerb (cJoogso s) ;
@@ -243,7 +243,7 @@ oper
mkV3 = overload {
mkV3 : (sug : Str) -> V3 = \s -> lin V3 (regV s ** {c2,c3 = noPrep}) ;
mkV3 : (sug : Str) -> (_,_ : Adposition) -> V3 = \s,p,q -> lin V3 (regV s ** {c2 = p ; c3 = q}) ;
mkV3 : V -> (_,_ : Adposition) -> V2 = \v,p,q -> lin V3 (v ** {c2 = p ; c3 = q}) ;
mkV3 : V -> (_,_ : Adposition) -> V3 = \v,p,q -> lin V3 (v ** {c2 = p ; c3 = q}) ;
} ;
mkVV = overload {

View File

@@ -115,14 +115,14 @@ lin above_Prep = mkPrep (mkPrep ka) [] [] "dul" ;
-- lin after_Prep = mkPrep ""
-- lin before_Prep = mkPrep "" ;
-- lin behind_Prep = mkPrep "" ;
lin between_Prep = possPrep (nUl "dhex") ;
lin between_Prep = possPrep (lin N (nUl "dhex")) ;
-- lin by8agent_Prep = mkPrep ;
-- lin by8means_Prep = mkPrep ;
-- lin during_Prep = mkPrep ;
-- lin except_Prep = mkPrep ;
-- lin for_Prep = mkPrep ;
-- lin from_Prep = mkPrep "" ;
lin in8front_Prep = possPrep (nUl "hor") ;
lin in8front_Prep = possPrep (lin N (nUl "hor")) ;
lin in_Prep = mkPrep ku ;
lin on_Prep = mkPrep ku ;
-- lin part_Prep = mkPrep ;
@@ -130,7 +130,7 @@ lin on_Prep = mkPrep ku ;
-- lin through_Prep = mkPrep ;
-- lin to_Prep = mkPrep ;
lin under_Prep =
let hoos : CatSom.Prep = possPrep (nUl "hoos")
let hoos : CatSom.Prep = possPrep (lin N (nUl "hoos"))
in hoos ** {c2 = Ku} ;
lin with_Prep = mkPrep la ;
-- lin without_Prep = mkPrep ;
@@ -176,7 +176,7 @@ lin yes_Utt = ss "haa" ;
-------
-- Verb
lin have_V2 = mkV2 have_V noPrep ; -- TODO: check if {sii = "l" ++ BIND ; isCopula=True} makes sense for present tense negative
lin have_V2 = mkV2 (lin V have_V) noPrep ; -- TODO: check if {sii = "l" ++ BIND ; isCopula=True} makes sense for present tense negative
lin can8know_VV = can_VV ; -- can (capacity)
lin can_VV = mkVV "kar" ; -- can (possibility)
lin must_VV = mkVV waa_in ;
@@ -190,18 +190,17 @@ lin please_Voc = ss "" ;
-}
oper
mkIAdv : Adposition -> Str -> Bool -> ResSom.IAdv = \pr ->
let pr' : Prep = ParadigmsSom.mkPrep pr ;
in prepIP pr' ;
prepIP (ParadigmsSom.mkPrep pr) ;
mkIP : (maxay, maxaa : Str) -> Bool -> IP = \maxay,maxaa,b -> emptyNP ** {
mkIP : (maxay, maxaa : Str) -> Bool -> IP = \maxay,maxaa,b -> lin IP (emptyNP ** {
s = table {
Nom => maxaa ; -- together with STM
Abs => maxay } ; -- alone, no STM (used in UttIP and IComp)
contractSTM = b ;
} ;
}) ;
prepIP : Prep -> Str -> Bool -> ResSom.IAdv = \pr,str,b ->
prepIP : CatSom.Prep -> Str -> Bool -> ResSom.IAdv = \pr,str,b ->
let adv : Adverb = prepNP (mkPrep pr str [] []) emptyNP ;
in adv ** {contractSTM = b ; s = linAdv adv} ;
in lin IP (adv ** {contractSTM = b ; s = linAdv adv}) ;
}

View File

@@ -166,65 +166,65 @@ oper
-- Used in application grammars, please don't remove. /IL
agr2pron : Agr => Pron = table {
{g=Masc ; n=Sg ; p=P1}
=> mkPronoun
=> lin Pron (mkPronoun
"yo" "me" "me" "mí"
"mi" "mi" "mis" "mis"
Masc Sg P1 ;
Masc Sg P1) ;
{g=Masc ; n=Sg ; p=P2}
=> mkPronoun
=> lin Pron (mkPronoun
"tú" "te" "te" "ti"
"tu" "tu" "tus" "tus"
Masc Sg P2 ;
Masc Sg P2) ;
{g=Masc ; n=Sg ; p=P3}
=> mkPronoun
=> lin Pron (mkPronoun
"él" "lo" "le" "él"
"su" "su" "sus" "sus"
Masc Sg P3 ;
Masc Sg P3) ;
{g=Masc ; n=Pl ; p=P1}
=> mkPronoun
=> lin Pron (mkPronoun
"nosotros" "nos" "nos" "nosotros"
"nuestro" "nuestra" "nuestros" "nuestras"
Masc Pl P1 ;
Masc Pl P1) ;
{g=Masc ; n=Pl ; p=P2}
=> mkPronoun
=> lin Pron (mkPronoun
"vosotros" "os" "os" "vosotros"
"vuestro" "vuestra" "vuestros" "vuestras"
Masc Pl P2 ;
Masc Pl P2) ;
{g=Masc ; n=Pl ; p=P3}
=> mkPronoun
=> lin Pron (mkPronoun
"ellos" "los" "les" "ellos"
"su" "su" "sus" "sus"
Masc Pl P3 ;
Masc Pl P3) ;
{g=Fem ; n=Sg ; p=P1}
=> mkPronoun
=> lin Pron (mkPronoun
"yo" "me" "me" "mí"
"mi" "mi" "mis" "mis"
Fem Sg P1 ;
Fem Sg P1) ;
{g=Fem ; n=Sg ; p=P2}
=> mkPronoun
=> lin Pron (mkPronoun
"tú" "te" "te" "ti"
"tu" "tu" "tus" "tus"
Fem Sg P2 ;
Fem Sg P2) ;
{g=Fem ; n=Sg ; p=P3}
=> mkPronoun
=> lin Pron (mkPronoun
"ella" "la" "le" "ella"
"su" "su" "sus" "sus"
Fem Sg P3 ;
Fem Sg P3) ;
{g=Fem ; n=Pl ; p=P1}
=> mkPronoun
=> lin Pron (mkPronoun
"nosotras" "nos" "nos" "nosotras"
"nuestro" "nuestra" "nuestros" "nuestras"
Fem Pl P1 ;
Fem Pl P1) ;
{g=Fem ; n=Pl ; p=P2}
=> mkPronoun
=> lin Pron (mkPronoun
"vosotras" "os" "os" "vosotras"
"vuestro" "vuestra" "vuestros" "vuestras"
Fem Pl P2 ;
Fem Pl P2) ;
{g=Fem ; n=Pl ; p=P3}
=> mkPronoun
=> lin Pron (mkPronoun
"ellas" "las" "les" "ellas"
"su" "su" "sus" "sus"
Fem Pl P3
Fem Pl P3)
} ;
--2 Determiners

View File

@@ -388,7 +388,7 @@ mkN2 = overload {
} ;
regV=MorphoSwa.regV ;
regV=\v -> lin V (MorphoSwa.regV v) ;
mkV = overload {
mkV : Str -> V = \v ->lin V(regV v) ;

View File

@@ -65,7 +65,7 @@ lin
monthPN m = ss m.s ;
languageNP l = mkNP l ;
languageCN l = mkCN l ;
languageCN l = l ;
monday_Weekday = mkN (R.thword "วัน" "จั" "นท" "ร์") ;
tuesday_Weekday = mkN (R.thword "วัน" "อัง" "คาร") ;

View File

@@ -11,12 +11,12 @@ lin
airplane_N = mkN (thword "เครื่อง" "บิน") "ลำ" ;
already_Adv = mkAdv (thword "เรียบ" "ร้อย") ;
animal_N = animalN (thword "สัตว์") ;
answer_V2S = mkV2S (regV "ตอบ") [] ; ---- prep
answer_V2S = mkV2S (mkV "ตอบ") [] ; ---- prep
apartment_N = mkN (thword "ห้อง" "เช่า")"ห้อง" ;
apple_N = mkN (thbind "แอป" "เปิ้ล") "ลูก" ;
art_N = mkN (thword "ศิล" "ปะ") ;
ashes_N = mkN (thword "เถ้า") ;
ask_V2Q = regV "ถาม" ** {c2 = []} ;
ask_V2Q = mkV "ถาม" ** {c2 = []} ;
at_Prep = mkPrep "ที่" ;
baby_N = mkN (thword "เด็ก" "ทา" "รก") "คน" ;
back_N = mkN (thword "หลัง") ;
@@ -26,7 +26,7 @@ lin
beautiful_A = mkA "สวย" ;
become_VA = mkV (thword "กลาย" "เป็น") ; -- pen
beer_N = mkN biar_s kew_s ;
beg_V2V = regV "ขอ" ** {c2 = [] ; c3 = "ให้"} ; --- hay as prep of VP
beg_V2V = mkV "ขอ" ** {c2 = [] ; c3 = "ให้"} ; --- hay as prep of VP
belly_N = mkN (thword "พุง") ;
big_A = mkA (thword "ใหญ่") ;
bike_N = mkN (thword "จักร" "ยาน") "คัน" ;
@@ -105,7 +105,7 @@ lin
father_N2 = mkN2 (personN (thword "พ่อ")) poss ;
fear_N = mkN (thword "ความ" "กลัว") ;
fear_V2 = mkV2 "กลัว";
fear_VS = mkVS (regV "กลัว") ;
fear_VS = mkVS (mkV "กลัว") ;
feather_N = mkN (thword "ขน" "นก") ;
fight_V2 = mkV2 (thword "สู้") ;
find_V2 = mkV2 "หา" ;
@@ -151,7 +151,7 @@ lin
hill_N = placeN (thword "เนิน" "เขา") ;
hit_V2 = mkV2 (thword "ตี") ;
hold_V2 = mkV2 (thword "รั้ง") ;
hope_VS = mkVS (regV "หวัง") ;
hope_VS = mkVS (mkV "หวัง") ;
horn_N = mkN (thword "เขา") ;
horse_N = mkN "ม้า" " ตัว" ;
hot_A = mkA "ร้อน" ;
@@ -168,8 +168,8 @@ lin
king_N = mkN (thword "พระ" "รา" "ชา") (thword "พระ" "องด์") ;
knee_N = mkN (thword "เข่า") ;
know_V2 = mkV2 "รู้" ; ----?
know_VQ = lin VQ (regV "รู้") ;
know_VS = lin VS (regV "รู้") ;
know_VQ = lin VQ (mkV "รู้") ;
know_VS = lin VS (mkV "รู้") ;
lake_N = mkN (thword "ทะ" "เล" "สาบ") ; ----?
lamp_N = mkN (thword "โคม" "ไฟ") ; ----?
language_N = mkN (thword "ภา" "ษา") ; ----?
@@ -214,7 +214,7 @@ lin
old_A = mkA (thword "แก่") ;
open_V2 = mkV2 (mkV "เปิด") ;
other_A = mkA "อื่น" ;
paint_V2A = mkV2A (regV "ทา") [] "สี" ;
paint_V2A = mkV2A (mkV "ทา") [] "สี" ;
paper_N = mkN (thword "กระ" "ดาษ") ; ----?
paris_PN = ss "ปารีส" ;
peace_N = mkN (thword "สัน" "ติ" "ภาพ"); ----?
@@ -255,7 +255,7 @@ lin
run_V = mkV "วิ่ง" ;
salt_N = mkN (thword "เกลือ") ;
sand_N = mkN (thword "ทราย") ;
say_VS = mkVS (regV "พูด") ;
say_VS = mkVS (mkV "พูด") ;
school_N = placeN (thword "โรง" "เรียน") ;
---- science_N = mkN "science" ; ----?
scratch_V2 = mkV2 (thword "เกา") ;
@@ -351,7 +351,7 @@ lin
wing_N = mkN (thword "ปิก") ;
wipe_V2 = mkV2 (thword "เช็ด") ;
woman_N = personN (thword "หญิง") ;
wonder_VQ = mkVQ (regV (thword "ประ" "หลาด" "ใจ")) ; ----
wonder_VQ = mkVQ (mkV (thword "ประ" "หลาด" "ใจ")) ; ----
wood_N = mkN "ไม้" ; ----?
worm_N = animalN (thword "หนอน") ;
write_V2 = mkV2 "เขียน" ;

View File

@@ -55,10 +55,10 @@ resource ParadigmsTur = open
mkV2V : V -> V2V = \verb -> lin V2V (verb ** {c = noPrep}) ;
mkV2S : V -> V2S = \verb -> lin V2S (verb ** {c = noPrep}) ;
mkVA : V -> VA = \verb -> verb ;
mkVV : V -> VV = \verb -> verb ;
mkVS : V -> VS = \verb -> verb ;
mkVQ : V -> VQ = \verb -> verb ;
mkVA : V -> VA = \verb -> lin VA verb ;
mkVV : V -> VV = \verb -> lin VV verb ;
mkVS : V -> VS = \verb -> lin VS verb ;
mkVQ : V -> VQ = \verb -> lin VQ verb ;
-- make a regular verb
-- supply infinitive, softened infinitive, future infinitive forms and

View File

@@ -1244,13 +1244,13 @@ oper
} ;
mkN2 = overload {
mkN2 : N -> N2 = \n -> n ** {c2 = noPrep} ;
mkN2 : N -> Prep -> N2 = \n,p -> n ** {c2 = p} ;
mkN2 : N -> N2 = \n -> lin N2 (n ** {c2 = noPrep}) ;
mkN2 : N -> Prep -> N2 = \n,p -> lin N2 (n ** {c2 = p}) ;
} ;
mkN3 = overload {
mkN3 : N -> N3 = \n -> n ** {c2 = noPrep; c3 = noPrep} ;
mkN3 : N -> Prep -> Prep -> N3 = \n,p1,p2 -> n ** {c2 = p1; c3 = p2} ;
mkN3 : N -> N3 = \n -> lin N3 (n ** {c2 = noPrep; c3 = noPrep}) ;
mkN3 : N -> Prep -> Prep -> N3 = \n,p1,p2 -> lin N3 (n ** {c2 = p1; c3 = p2}) ;
} ;
mkV = overload {
@@ -1258,39 +1258,39 @@ oper
mkV : Str -> Str -> V = reg2V -- Active;Imperf;Pres;P1;Sg imperative1
} ;
mkVV : V -> VV = \v -> v ;
mkVS : V -> VS = \v -> v ;
mkVQ : V -> VQ = \v -> v ;
mkVA : V -> VA = \v -> v ;
mkVV : V -> VV = \v -> lin VV v ;
mkVS : V -> VS = \v -> lin VS v ;
mkVQ : V -> VQ = \v -> lin VQ v ;
mkVA : V -> VA = \v -> lin VA v ;
mkV2 = overload {
mkV2 : V -> V2 = \v -> v ** {c2 = noPrep} ;
mkV2 : V -> Prep -> V2 = \v,p -> v ** {c2 = p} ;
mkV2 : V -> V2 = \v -> lin V2 (v ** {c2 = noPrep}) ;
mkV2 : V -> Prep -> V2 = \v,p -> lin V2 (v ** {c2 = p}) ;
} ;
mkV3 = overload {
mkV3 : V -> V3 = \v -> v ** {c2 = noPrep; c3 = noPrep} ;
mkV3 : V -> Prep -> Prep -> V3 = \v,p1,p2 -> v ** {c2 = p1; c3 = p2} ;
mkV3 : V -> V3 = \v -> lin V3 (v ** {c2 = noPrep; c3 = noPrep}) ;
mkV3 : V -> Prep -> Prep -> V3 = \v,p1,p2 -> lin V3 (v ** {c2 = p1; c3 = p2}) ;
} ;
mkV2A = overload {
mkV2A : V -> V2A = \v -> v ** {c2 = noPrep; c3 = noPrep} ;
mkV2A : V -> Prep -> Prep -> V2A = \v,p1,p2 -> v ** {c2 = p1; c3 = p2} ;
mkV2A : V -> V2A = \v -> lin V2A (v ** {c2 = noPrep; c3 = noPrep}) ;
mkV2A : V -> Prep -> Prep -> V2A = \v,p1,p2 -> lin V2A (v ** {c2 = p1; c3 = p2}) ;
} ;
mkV2S = overload {
mkV2S : V -> V2S = \v -> v ** {c2 = noPrep; c3 = noPrep} ;
mkV2S : V -> Prep -> Prep -> V2S = \v,p1,p2 -> v ** {c2 = p1; c3 = p2} ;
mkV2S : V -> V2S = \v -> lin V2S (v ** {c2 = noPrep; c3 = noPrep}) ;
mkV2S : V -> Prep -> Prep -> V2S = \v,p1,p2 -> lin V2S (v ** {c2 = p1; c3 = p2}) ;
} ;
mkV2Q = overload {
mkV2Q : V -> V2Q = \v -> v ** {c2 = noPrep; c3 = noPrep} ;
mkV2Q : V -> Prep -> Prep -> V2Q = \v,p1,p2 -> v ** {c2 = p1; c3 = p2} ;
mkV2Q : V -> V2Q = \v -> lin V2Q (v ** {c2 = noPrep; c3 = noPrep}) ;
mkV2Q : V -> Prep -> Prep -> V2Q = \v,p1,p2 -> lin V2Q (v ** {c2 = p1; c3 = p2}) ;
} ;
mkV2V = overload {
mkV2V : V -> V2V = \v -> v ** {c2 = noPrep; c3 = noPrep} ;
mkV2V : V -> Prep -> Prep -> V2V = \v,p1,p2 -> v ** {c2 = p1; c3 = p2} ;
mkV2V : V -> V2V = \v -> lin V2V (v ** {c2 = noPrep; c3 = noPrep}) ;
mkV2V : V -> Prep -> Prep -> V2V = \v,p1,p2 -> lin V2V (v ** {c2 = p1; c3 = p2}) ;
} ;
mkA = overload {
@@ -1299,8 +1299,8 @@ oper
} ;
mkA2 = overload {
mkA2 : A -> A2 = \a -> a ** {c2 = noPrep} ;
mkA2 : A -> Prep -> A2 = \a,p -> a ** {c2 = p} ;
mkA2 : A -> A2 = \a -> lin A2 (a ** {c2 = noPrep}) ;
mkA2 : A -> Prep -> A2 = \a,p -> lin A2 (a ** {c2 = p}) ;
} ;
mkAdv : Str -> Adv = \s -> lin Adv {s=s} ;

View File

@@ -83,7 +83,7 @@ oper
-- compound Adjectives
mkCompoundA : Str -> Str -> A ; -- e.g dra hwa
mkCompoundA s1 s2 = compoundAdj s1 s2 ;
mkCompoundA s1 s2 = lin A (compoundAdj s1 s2) ;
--2 Verbs
@@ -144,7 +144,7 @@ mkAdV : Str -> AdV = \s -> lin AdV {s=s} ;
-- mkQuant : Pron -> Quant = \p -> {s = \\_,_,c => p.s!c ;a = p.a ; lock_Quant = <>};
-- mkQuant : (no_sg, no_pl, none_sg, non_pl : Str) -> Quant = mkQuantifier;
-- } ;
mkIQuant : Str -> IQuant = \s -> makeIQuant s ;
mkIQuant : Str -> IQuant = \s -> lin IQuant (makeIQuant s) ;
--2 Conjunctions
@@ -166,7 +166,7 @@ mkAdV : Str -> AdV = \s -> lin AdV {s=s} ;
-- mkV0 : V -> V0 ;
mkVS : V -> VS; -- e.g drna
mkVS v = v ;
mkVS v = lin VS v ;
-- mkV2S : V -> Prep -> V2S ;
mkVV : V -> VV = -- e.g cahna
\v -> lin VV (v ** {isAux = False});
@@ -181,7 +181,7 @@ mkAdV : Str -> AdV = \s -> lin AdV {s=s} ;
-- mkVA : V -> VA ;
-- mkV2A : V -> Prep -> V2A ;
mkVQ : V -> VQ ; -- e.g janna
mkVQ v = v ;
mkVQ v = lin VQ v ;
-- mkV2Q : V -> Prep -> V2Q ;
--
-- mkAS : A -> AS ;