1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
|
--# -path=.:../abstract:../common:../../prelude
resource ResTur = ParamX ** open Prelude, Predef in {
--2 For $Noun$
param
Case = Nom | Acc | Dat | Gen | Loc | Ablat | Abess ;
Species = Indef | Def ;
VForm =
VPres Number Person
| VPast Number Person
| VFuture Number Person
| VAorist Number Person
| VImperative
| VInfinitive
;
oper
Agr = {n : Number ; p : Person} ;
-- For $Verb$.
Verb : Type = {
s : VForm => Str
} ;
--2 For $Numeral$
param
DForm = unit | ten ;
-- For $Numeral$.
oper
mkNum : Str -> Str -> {s : DForm => Str} =
\two, twenty ->
{s = table {
unit => two ;
ten => twenty
}
} ;
mkNP : (ben,beni,bana,banin,bende,benden:Str) -> Number -> Person ->
{s : Case => Str ; a : Agr} =
\ben,beni,bana,banin,bende,benden,n,p -> {
s = table {
Nom => ben ;
Acc => beni ;
Dat => bana ;
Gen => banin ;
Loc => bende ;
Abl => benden
} ;
a = {n=n; p=p} ;
} ;
oper
harmony4 : Str -> Str -> Str
= \base,suffix0 ->
let c : Str =
case base of {
_+c@("ı"|"a"|"i"|"e"|"u"|"o"|"ü"|"ö")+
("b"|"v"|"d"|"z"|"j"|"c"|"g"|"ğ"|"l"|"r"|"m"|"n"|"y"|"p"|"f"|"t"|"s"|"ş"|"ç"|"k"|"h")* => c ;
_ => error "harmony4"
} ;
h : Str =
case c of {
("ı"|"a") => "ı" ;
("i"|"e") => "i" ;
("u"|"o") => "u" ;
("ü"|"ö") => "ü"
} ;
suffix : Str =
case suffix0 of {
s1@(("b"|"v"|"d"|"z"|"j"|"c"|"g"|"ğ"|"l"|"r"|"m"|"n"|"y"|"p"|"f"|"t"|"s"|"ş"|"ç"|"k"|"h")*)
+ ("ı"|"a"|"i"|"e"|"u"|"o"|"ü"|"ö")
+s2 => s1+h+s2 ;
s => s
}
in base + suffix ;
harmony2 : Str -> Str -> Str
= \base,suffix0 ->
let c : Str =
case base of {
_+c@("ı"|"a"|"i"|"e"|"u"|"o"|"ü"|"ö")+
("b"|"v"|"d"|"z"|"j"|"c"|"g"|"ğ"|"l"|"r"|"m"|"n"|"y"|"p"|"f"|"t"|"s"|"ş"|"ç"|"k"|"h")* => c ;
_ => error "harmony4"
} ;
h : Str =
case c of {
("ı"|"a") => "ı" ;
("i"|"e") => "i" ;
("u"|"o") => "u" ;
("ü"|"ö") => "ü"
} ;
suffix : Str =
case suffix0 of {
s1@(("b"|"v"|"d"|"z"|"j"|"c"|"g"|"ğ"|"l"|"r"|"m"|"n"|"y"|"p"|"f"|"t"|"s"|"ş"|"ç"|"k"|"h")*)
+ ("ı"|"a"|"i"|"e"|"u"|"o"|"ü"|"ö")
+s2 => s1+h+s2 ;
s => s
}
in base + suffix ;
}
|