Differences From
Artifact [744b4b50d4]:
1 1 type word = A of string | An of string
2 2 type root = Edy of word | Xy of word | Ation of word | Le of word | A of word | Cy of word
3 3 | Rous of word | Ics of word | Ics2 of word | Sis of word | X of word | Ality of word | Ty of word
4 - | Ication of word | Tion of word | Arity of word | Sm of word
4 + | Ication of word | Tion of word | Arity of word | Sm of word | Ine of word
5 5 type prefix = Inv of word | Vf of word * string
6 6 let prefixes = [|
7 7 Vf(A "mult","i"); Inv (A "pre"); Vf(An "ex","o"); Vf(A "retr","o");
8 8 Inv (A "hyper"); Vf(A "hem","i"); Inv (A "eu"); Vf(A "par","a");
9 9 Vf(A "gastr","o"); Vf(A "bell","i"); Inv (An "an"); Vf(A "mes","o");
10 10 Vf(A "therm","o"); Vf(A "copr","o"); Vf(A "pleb","i"); Vf(An "ant","i");
11 11 Vf(A "pseud","o"); Vf(A "quas", "i"); Vf(A "crypt","o"); Vf(A "bronch","o");
................................................................................
27 27 Inv(A "tech"); Vf(A "plasm","o"); Vf(A "megal","o"); Inv(A "cyber");
28 28 Vf(A "met","a"); Inv(A "neo"); Vf(An "ocul","o"); Vf(A "strangul","o");
29 29 Vf(A "dendr","o"); Vf(A "matr","i"); Vf(A "patr","i"); Vf(A "lesb","o");
30 30 Vf(A "hom","o"); Vf(A "heter","o"); Vf(A "prot","o"); Vf(An "ect","o");
31 31 Vf(A "weeb","o"); Vf(A "fung","i"); Vf(A "per","i"); Vf(A "petr","i");
32 32 Vf(A "sad","o"); Vf(A "femin","i"); Vf(A "mascul","o"); Vf(A "claustr","o");
33 33 Vf(A "neur","o"); Vf(A "norm","o"); Inv (A "eu"); Vf(A "sten","o");
34 - Vf(A "stegan","o");
34 + Vf(A "stegan","o"); Vf(A "rhod", "o");
35 35
36 36 Vf(An "agor","a"); Vf(A "thanat","o"); Vf(A "vagin","o"); Vf(A "bi","o");
37 37 Vf(A "blog","o"); Vf(A "prometh","eo"); Vf(An "anesthes", "io");
38 38 Vf(A "din","o"); Vf(A "medic","o");
39 39 |]
40 40
41 41 let roots = [|
................................................................................
107 107 Ality (A "typic");
108 108 Xy (A "do");
109 109 Ality (A "leg");
110 110 Sm (A "legali");
111 111 Ation (A "leg");
112 112 A (A "pragmat");
113 113 A (A "stigmat");
114 + Ine (A "rhadamanth");
114 115 |]
115 116
116 117 let nsuffixes = [|
117 118 An "ite";
118 119 An "ate";
119 120 An "itis";
120 121 A "sis";
................................................................................
223 224 An x -> An (x^s) | A x -> A (x^s);;
224 225 let pick (r : 'a array) : 'a = r.(Random.int(Array.length r))
225 226 let chance i = (Random.int i) = 0
226 227 let cform root = match root with
227 228 | Edy x -> x^^"edo" | Xy x -> x^^"cto" | Ation x -> x^^"o"
228 229 | Rous x -> x^^"ro" | Le x -> x^^"ulo" | A x -> x^^"o"
229 230 | Cy x -> x^^"tico" | Ics x | Ics2 x -> x^^(if chance 2 then "i" else "o")
230 - | Sis x -> x^^"to"
231 + | Sis x -> x^^"to" | Ine x -> x^^"o"
231 232 | X x -> x^^"co" | Ality x -> x^^"o" | Ty x -> x^^"to"
232 233 | Ication x -> x^^"o" | Tion x -> x^^"to" | Arity x -> x^^"a"
233 234 | Sm x -> x^^(if chance 2 then "smo" else "sto")
234 235 let bareform root = match root with
235 236 | Edy x -> (if chance 2 then x else x^^"ed") | Xy x -> x^^"ct" | Ation x -> x
236 237 | Rous x -> x^^"r" | Le x -> x^^"ul" | A x -> x
237 238 | Cy x -> x^^"tic" | Ics x -> x^^"ic" | Ics2 x -> x | Sis x -> x^^"t"
238 239 | X x -> x^^"c" | Ality x -> x | Ty x -> x^^"t"
239 240 | Ication x -> x | Tion x -> x^^"t" | Arity x -> x
240 - | Sm x -> x^^"st"
241 + | Sm x -> x^^"st" | Ine x -> x
241 242 let adjform root = match root with
242 243 | Edy x -> x^^"ic" | Xy x -> x^^"ctic" | Ation x -> x^^"ic"
243 244 | Rous x -> x^^"rous" | Le x -> x^^"ulous" | A x -> x^^"e"
244 245 | Cy x -> x^^"tical" | Ics x -> x^^"ical" | Ics2 x -> x^^"ic" | Sis x -> x^^"tic"
245 246 | X x -> x^^"cal" | Ality x -> x^^"al" | Ty x -> x^^"tical"
246 247 | Ication x -> x^^(if chance 3 then "itious" else "icate")
247 248 | Tion x -> x^^(match Random.int 4 with
248 249 | 0 -> "tive" | 1 -> "ted" | 2 -> "cious" | 3 -> "tory" | _ -> assert false)
249 250 | Arity x -> x^^"ary" | Sm x -> x^^(if chance 2 then "stic" else "smic")
251 + | Ine x -> x^^"ine"
250 252 let nform root = if chance 7 then (adjform root) ^^ "ness" else match root with
251 253 | Edy x -> x^^"edy" | Xy x -> x^^"xy" | Ation x -> x^^(if chance 3 then "itor" else "ation")
252 254 | Rous x -> x^^"er" | Le x -> x^^"le" | A x -> x^^"a"
253 255 | Cy x -> x^^"cy" | Ics x -> x^^(if chance 3 then "ician" else "ics") | Sis x -> x^^"sis"
254 256 | Ics2 x -> x^^(if chance 3 then "ician" else "ics")
255 257 | X x -> x^^"x" | Ality x -> x^^"ality" | Ty x -> x^^"ty"
256 258 | Ication x -> x^^"ication" | Tion x -> x^^"tion" | Arity x -> x^^"arity"
257 - | Sm x -> x^^(if chance 2 then "st" else "sm")
259 + | Sm x -> x^^(if chance 2 then "st" else "sm") | Ine x -> x
258 260 let abs (w:word) = match w with A x | An x -> x
259 261 let append pref w = match pref with
260 262 | Inv x -> x ^^ (abs w)
261 263 | Vf(body,v) -> match w with
262 264 | An x -> body^^x
263 265 | A x -> (body^^v)^^x
264 266 let rec word () : word = match Random.int 7 with