test (Polyglot)¶
In [ ]:
//// test
open testing
In [ ]:
//// test
//// print_code
inl jp = [ "J"; "P" ]
inl tf = [ "T"; "F" ]
inl sn = [ "S"; "N" ]
inl ie = [ "I"; "E" ]
(ie, ([] : _ string))
||> listm.foldBack fun ie' acc =>
inl ssnn acc' jp' =
(sn, acc')
||> listm.foldBack fun sn' acc' =>
inl c' ie' sn' tf' jp' =
$'$"{!ie'}{!sn'}{!tf'}{!jp'}"'
if listm.length acc' % 4i32 = 2 then
(tf, acc')
||> listm.foldBack fun tf' acc'' =>
c' ie' sn' tf' jp' :: acc''
else
(acc', tf)
||> listm.fold fun acc'' tf' =>
c' ie' sn' tf' jp' :: acc''
if acc = [] then
(acc, jp)
||> listm.fold fun acc' jp' =>
ssnn acc' jp'
else
(jp, acc)
||> listm.foldBack fun jp' acc' =>
ssnn acc' jp'
|> listm'.box
|> listm'.to_array'
|> _assert_eq' ;[
"ISTJ"; "ISFJ"; "INFJ"; "INTJ"
"ISTP"; "ISFP"; "INFP"; "INTP"
"ESTP"; "ESFP"; "ENFP"; "ENTP"
"ESTJ"; "ESFJ"; "ENFJ"; "ENTJ"
]
type Mut0 = {mutable l0 : string} let rec method1 (v0 : bool) : bool = v0 and method3 () : string = let v0 : string = "" v0 and closure0 (v0 : Mut0, v1 : string) () : unit = let v2 : string = v0.l0 let v4 : string = v2 + v1 v0.l0 <- v4 () and method2 (v0 : string, v1 : (string []), v2 : (string [])) : string = let v3 : string = method3() let v4 : Mut0 = {l0 = v3} : Mut0 let v7 : string = "{ " let v8 : string = $"{v7}" let v16 : unit = () let v17 : (unit -> unit) = closure0(v4, v8) let v18 : unit = (fun () -> v17 (); v16) () let v26 : string = "name" let v27 : string = $"{v26}" let v35 : unit = () let v36 : (unit -> unit) = closure0(v4, v27) let v37 : unit = (fun () -> v36 (); v35) () let v45 : string = " = " let v46 : string = $"{v45}" let v54 : unit = () let v55 : (unit -> unit) = closure0(v4, v46) let v56 : unit = (fun () -> v55 (); v54) () let v63 : string = $"{v0}" let v71 : unit = () let v72 : (unit -> unit) = closure0(v4, v63) let v73 : unit = (fun () -> v72 (); v71) () let v81 : string = "; " let v82 : string = $"{v81}" let v90 : unit = () let v91 : (unit -> unit) = closure0(v4, v82) let v92 : unit = (fun () -> v91 (); v90) () let v100 : string = "actual" let v101 : string = $"{v100}" let v109 : unit = () let v110 : (unit -> unit) = closure0(v4, v101) let v111 : unit = (fun () -> v110 (); v109) () let v118 : string = $"{v45}" let v126 : unit = () let v127 : (unit -> unit) = closure0(v4, v118) let v128 : unit = (fun () -> v127 (); v126) () let v135 : string = $"%A{v1}" let v139 : string = $"{v135}" let v147 : unit = () let v148 : (unit -> unit) = closure0(v4, v139) let v149 : unit = (fun () -> v148 (); v147) () let v156 : string = $"{v81}" let v164 : unit = () let v165 : (unit -> unit) = closure0(v4, v156) let v166 : unit = (fun () -> v165 (); v164) () let v174 : string = "expected" let v175 : string = $"{v174}" let v183 : unit = () let v184 : (unit -> unit) = closure0(v4, v175) let v185 : unit = (fun () -> v184 (); v183) () let v192 : string = $"{v45}" let v200 : unit = () let v201 : (unit -> unit) = closure0(v4, v192) let v202 : unit = (fun () -> v201 (); v200) () let v209 : string = $"%A{v2}" let v213 : string = $"{v209}" let v221 : unit = () let v222 : (unit -> unit) = closure0(v4, v213) let v223 : unit = (fun () -> v222 (); v221) () let v231 : string = " }" let v232 : string = $"{v231}" let v240 : unit = () let v241 : (unit -> unit) = closure0(v4, v232) let v242 : unit = (fun () -> v241 (); v240) () let v248 : string = v4.l0 v248 and closure1 (v0 : string) () : unit = let v1 : (string -> unit) = System.Console.WriteLine v1 v0 and method0 () : unit = let v0 : string = "E" let v1 : string = "N" let v2 : string = "T" let v3 : string = "J" let v4 : string = $"{v0}{v1}{v2}{v3}" let v5 : string = "F" let v6 : string = $"{v0}{v1}{v5}{v3}" let v7 : string = "S" let v8 : string = $"{v0}{v7}{v5}{v3}" let v9 : string = $"{v0}{v7}{v2}{v3}" let v10 : string = "P" let v11 : string = $"{v0}{v1}{v2}{v10}" let v12 : string = $"{v0}{v1}{v5}{v10}" let v13 : string = $"{v0}{v7}{v5}{v10}" let v14 : string = $"{v0}{v7}{v2}{v10}" let v15 : string = "I" let v16 : string = $"{v15}{v1}{v2}{v10}" let v17 : string = $"{v15}{v1}{v5}{v10}" let v18 : string = $"{v15}{v7}{v5}{v10}" let v19 : string = $"{v15}{v7}{v2}{v10}" let v20 : string = $"{v15}{v1}{v2}{v3}" let v21 : string = $"{v15}{v1}{v5}{v3}" let v22 : string = $"{v15}{v7}{v5}{v3}" let v23 : string = $"{v15}{v7}{v2}{v3}" let v24 : string list = [] let v26 : string list = v4 :: v24 let v30 : string list = v6 :: v26 let v34 : string list = v8 :: v30 let v38 : string list = v9 :: v34 let v42 : string list = v11 :: v38 let v46 : string list = v12 :: v42 let v50 : string list = v13 :: v46 let v54 : string list = v14 :: v50 let v58 : string list = v16 :: v54 let v62 : string list = v17 :: v58 let v66 : string list = v18 :: v62 let v70 : string list = v19 :: v66 let v74 : string list = v20 :: v70 let v78 : string list = v21 :: v74 let v82 : string list = v22 :: v78 let v86 : string list = v23 :: v82 let v90 : (string list -> (string [])) = List.toArray let v91 : (string []) = v90 v86 let v94 : string = "ISTJ" let v95 : string = "ISFJ" let v96 : string = "INFJ" let v97 : string = "INTJ" let v98 : string = "ISTP" let v99 : string = "ISFP" let v100 : string = "INFP" let v101 : string = "INTP" let v102 : string = "ESTP" let v103 : string = "ESFP" let v104 : string = "ENFP" let v105 : string = "ENTP" let v106 : string = "ESTJ" let v107 : string = "ESFJ" let v108 : string = "ENFJ" let v109 : string = "ENTJ" let v110 : (string []) = [|v94; v95; v96; v97; v98; v99; v100; v101; v102; v103; v104; v105; v106; v107; v108; v109|] let v112 : bool = v91 = v110 let v116 : bool = if v112 then true else method1(v112) let v117 : string = "__assert_eq'" let v118 : string = method2(v117, v91, v110) let v120 : unit = () let v121 : (unit -> unit) = closure1(v118) let v122 : unit = (fun () -> v121 (); v120) () let v124 : bool = v116 = false if v124 then failwith<unit> v118 method0() { name = __assert_eq'; actual = [|"ISTJ"; "ISFJ"; "INFJ"; "INTJ"; "ISTP"; "ISFP"; "INFP"; "INTP"; "ESTP"; "ESFP"; "ENFP"; "ENTP"; "ESTJ"; "ESFJ"; "ENFJ"; "ENTJ"|]; expected = [|"ISTJ"; "ISFJ"; "INFJ"; "INTJ"; "ISTP"; "ISFP"; "INFP"; "INTP"; "ESTP"; "ESFP"; "ENFP"; "ENTP"; "ESTJ"; "ESFJ"; "ENFJ"; "ENTJ"|] }
In [ ]:
//// test
//// print_code
inl i_e =
listm'.replicate 8i32 "I" ++ listm'.replicate 8i32 "E"
inl s_n =
[ "S"; "S"; "N"; "N" ]
|> listm'.replicate 4i32
|> listm'.collect id
inl t_f =
[ "T"; "F"; "F"; "T" ]
|> listm'.replicate 4i32
|> listm'.collect id
inl j_p =
[ "J"; "J"; "J"; "J" ]
++ [ "P"; "P"; "P"; "P" ]
++ [ "P"; "P"; "P"; "P" ]
++ [ "J"; "J"; "J"; "J" ]
inl mbti =
listm'.map4 (fun a b c d => $'$"{!a}{!b}{!c}{!d}"') i_e s_n t_f j_p
mbti
|> listm'.box
|> listm'.to_array'
|> _assert_eq' ;[
"ISTJ"; "ISFJ"; "INFJ"; "INTJ"
"ISTP"; "ISFP"; "INFP"; "INTP"
"ESTP"; "ESFP"; "ENFP"; "ENTP"
"ESTJ"; "ESFJ"; "ENFJ"; "ENTJ"
]
type Mut0 = {mutable l0 : string} let rec method1 (v0 : bool) : bool = v0 and method3 () : string = let v0 : string = "" v0 and closure0 (v0 : Mut0, v1 : string) () : unit = let v2 : string = v0.l0 let v4 : string = v2 + v1 v0.l0 <- v4 () and method2 (v0 : string, v1 : (string []), v2 : (string [])) : string = let v3 : string = method3() let v4 : Mut0 = {l0 = v3} : Mut0 let v7 : string = "{ " let v8 : string = $"{v7}" let v16 : unit = () let v17 : (unit -> unit) = closure0(v4, v8) let v18 : unit = (fun () -> v17 (); v16) () let v26 : string = "name" let v27 : string = $"{v26}" let v35 : unit = () let v36 : (unit -> unit) = closure0(v4, v27) let v37 : unit = (fun () -> v36 (); v35) () let v45 : string = " = " let v46 : string = $"{v45}" let v54 : unit = () let v55 : (unit -> unit) = closure0(v4, v46) let v56 : unit = (fun () -> v55 (); v54) () let v63 : string = $"{v0}" let v71 : unit = () let v72 : (unit -> unit) = closure0(v4, v63) let v73 : unit = (fun () -> v72 (); v71) () let v81 : string = "; " let v82 : string = $"{v81}" let v90 : unit = () let v91 : (unit -> unit) = closure0(v4, v82) let v92 : unit = (fun () -> v91 (); v90) () let v100 : string = "actual" let v101 : string = $"{v100}" let v109 : unit = () let v110 : (unit -> unit) = closure0(v4, v101) let v111 : unit = (fun () -> v110 (); v109) () let v118 : string = $"{v45}" let v126 : unit = () let v127 : (unit -> unit) = closure0(v4, v118) let v128 : unit = (fun () -> v127 (); v126) () let v135 : string = $"%A{v1}" let v139 : string = $"{v135}" let v147 : unit = () let v148 : (unit -> unit) = closure0(v4, v139) let v149 : unit = (fun () -> v148 (); v147) () let v156 : string = $"{v81}" let v164 : unit = () let v165 : (unit -> unit) = closure0(v4, v156) let v166 : unit = (fun () -> v165 (); v164) () let v174 : string = "expected" let v175 : string = $"{v174}" let v183 : unit = () let v184 : (unit -> unit) = closure0(v4, v175) let v185 : unit = (fun () -> v184 (); v183) () let v192 : string = $"{v45}" let v200 : unit = () let v201 : (unit -> unit) = closure0(v4, v192) let v202 : unit = (fun () -> v201 (); v200) () let v209 : string = $"%A{v2}" let v213 : string = $"{v209}" let v221 : unit = () let v222 : (unit -> unit) = closure0(v4, v213) let v223 : unit = (fun () -> v222 (); v221) () let v231 : string = " }" let v232 : string = $"{v231}" let v240 : unit = () let v241 : (unit -> unit) = closure0(v4, v232) let v242 : unit = (fun () -> v241 (); v240) () let v248 : string = v4.l0 v248 and closure1 (v0 : string) () : unit = let v1 : (string -> unit) = System.Console.WriteLine v1 v0 and method0 () : unit = let v0 : string = "I" let v1 : string = "S" let v2 : string = "T" let v3 : string = "J" let v4 : string = $"{v0}{v1}{v2}{v3}" let v5 : string = "F" let v6 : string = $"{v0}{v1}{v5}{v3}" let v7 : string = "N" let v8 : string = $"{v0}{v7}{v5}{v3}" let v9 : string = $"{v0}{v7}{v2}{v3}" let v10 : string = "P" let v11 : string = $"{v0}{v1}{v2}{v10}" let v12 : string = $"{v0}{v1}{v5}{v10}" let v13 : string = $"{v0}{v7}{v5}{v10}" let v14 : string = $"{v0}{v7}{v2}{v10}" let v15 : string = "E" let v16 : string = $"{v15}{v1}{v2}{v10}" let v17 : string = $"{v15}{v1}{v5}{v10}" let v18 : string = $"{v15}{v7}{v5}{v10}" let v19 : string = $"{v15}{v7}{v2}{v10}" let v20 : string = $"{v15}{v1}{v2}{v3}" let v21 : string = $"{v15}{v1}{v5}{v3}" let v22 : string = $"{v15}{v7}{v5}{v3}" let v23 : string = $"{v15}{v7}{v2}{v3}" let v24 : string list = [] let v26 : string list = v23 :: v24 let v30 : string list = v22 :: v26 let v34 : string list = v21 :: v30 let v38 : string list = v20 :: v34 let v42 : string list = v19 :: v38 let v46 : string list = v18 :: v42 let v50 : string list = v17 :: v46 let v54 : string list = v16 :: v50 let v58 : string list = v14 :: v54 let v62 : string list = v13 :: v58 let v66 : string list = v12 :: v62 let v70 : string list = v11 :: v66 let v74 : string list = v9 :: v70 let v78 : string list = v8 :: v74 let v82 : string list = v6 :: v78 let v86 : string list = v4 :: v82 let v90 : (string list -> (string [])) = List.toArray let v91 : (string []) = v90 v86 let v94 : string = "ISTJ" let v95 : string = "ISFJ" let v96 : string = "INFJ" let v97 : string = "INTJ" let v98 : string = "ISTP" let v99 : string = "ISFP" let v100 : string = "INFP" let v101 : string = "INTP" let v102 : string = "ESTP" let v103 : string = "ESFP" let v104 : string = "ENFP" let v105 : string = "ENTP" let v106 : string = "ESTJ" let v107 : string = "ESFJ" let v108 : string = "ENFJ" let v109 : string = "ENTJ" let v110 : (string []) = [|v94; v95; v96; v97; v98; v99; v100; v101; v102; v103; v104; v105; v106; v107; v108; v109|] let v112 : bool = v91 = v110 let v116 : bool = if v112 then true else method1(v112) let v117 : string = "__assert_eq'" let v118 : string = method2(v117, v91, v110) let v120 : unit = () let v121 : (unit -> unit) = closure1(v118) let v122 : unit = (fun () -> v121 (); v120) () let v124 : bool = v116 = false if v124 then failwith<unit> v118 method0() { name = __assert_eq'; actual = [|"ISTJ"; "ISFJ"; "INFJ"; "INTJ"; "ISTP"; "ISFP"; "INFP"; "INTP"; "ESTP"; "ESFP"; "ENFP"; "ENTP"; "ESTJ"; "ESFJ"; "ENFJ"; "ENTJ"|]; expected = [|"ISTJ"; "ISFJ"; "INFJ"; "INTJ"; "ISTP"; "ISFP"; "INFP"; "INTP"; "ESTP"; "ESFP"; "ENFP"; "ENTP"; "ESTJ"; "ESFJ"; "ENFJ"; "ENTJ"|] }
In [ ]:
//// test
//// print_code
fun i =>
inl i_e =
if i < 8
then "I"
else "E"
inl s_n =
inl group = (i / 2) % 2
if group = 0
then "S"
else "N"
inl t_f =
match i % 4 with
| 0 => "T"
| 1 => "F"
| 2 => "F"
| _ => "T"
inl j_p =
if i < 4
then "J"
elif i < 12
then "P"
else "J"
$'$"{!i_e}{!s_n}{!t_f}{!j_p}"'
|> listm.init 16i32
|> listm'.box
|> listm'.to_array'
|> _assert_eq' ;[
"ISTJ"; "ISFJ"; "INFJ"; "INTJ"
"ISTP"; "ISFP"; "INFP"; "INTP"
"ESTP"; "ESFP"; "ENFP"; "ENTP"
"ESTJ"; "ESFJ"; "ENFJ"; "ENTJ"
]
type Mut0 = {mutable l0 : string} let rec method1 (v0 : bool) : bool = v0 and method3 () : string = let v0 : string = "" v0 and closure0 (v0 : Mut0, v1 : string) () : unit = let v2 : string = v0.l0 let v4 : string = v2 + v1 v0.l0 <- v4 () and method2 (v0 : string, v1 : (string []), v2 : (string [])) : string = let v3 : string = method3() let v4 : Mut0 = {l0 = v3} : Mut0 let v7 : string = "{ " let v8 : string = $"{v7}" let v16 : unit = () let v17 : (unit -> unit) = closure0(v4, v8) let v18 : unit = (fun () -> v17 (); v16) () let v26 : string = "name" let v27 : string = $"{v26}" let v35 : unit = () let v36 : (unit -> unit) = closure0(v4, v27) let v37 : unit = (fun () -> v36 (); v35) () let v45 : string = " = " let v46 : string = $"{v45}" let v54 : unit = () let v55 : (unit -> unit) = closure0(v4, v46) let v56 : unit = (fun () -> v55 (); v54) () let v63 : string = $"{v0}" let v71 : unit = () let v72 : (unit -> unit) = closure0(v4, v63) let v73 : unit = (fun () -> v72 (); v71) () let v81 : string = "; " let v82 : string = $"{v81}" let v90 : unit = () let v91 : (unit -> unit) = closure0(v4, v82) let v92 : unit = (fun () -> v91 (); v90) () let v100 : string = "actual" let v101 : string = $"{v100}" let v109 : unit = () let v110 : (unit -> unit) = closure0(v4, v101) let v111 : unit = (fun () -> v110 (); v109) () let v118 : string = $"{v45}" let v126 : unit = () let v127 : (unit -> unit) = closure0(v4, v118) let v128 : unit = (fun () -> v127 (); v126) () let v135 : string = $"%A{v1}" let v139 : string = $"{v135}" let v147 : unit = () let v148 : (unit -> unit) = closure0(v4, v139) let v149 : unit = (fun () -> v148 (); v147) () let v156 : string = $"{v81}" let v164 : unit = () let v165 : (unit -> unit) = closure0(v4, v156) let v166 : unit = (fun () -> v165 (); v164) () let v174 : string = "expected" let v175 : string = $"{v174}" let v183 : unit = () let v184 : (unit -> unit) = closure0(v4, v175) let v185 : unit = (fun () -> v184 (); v183) () let v192 : string = $"{v45}" let v200 : unit = () let v201 : (unit -> unit) = closure0(v4, v192) let v202 : unit = (fun () -> v201 (); v200) () let v209 : string = $"%A{v2}" let v213 : string = $"{v209}" let v221 : unit = () let v222 : (unit -> unit) = closure0(v4, v213) let v223 : unit = (fun () -> v222 (); v221) () let v231 : string = " }" let v232 : string = $"{v231}" let v240 : unit = () let v241 : (unit -> unit) = closure0(v4, v232) let v242 : unit = (fun () -> v241 (); v240) () let v248 : string = v4.l0 v248 and closure1 (v0 : string) () : unit = let v1 : (string -> unit) = System.Console.WriteLine v1 v0 and method0 () : unit = let v0 : string = "I" let v1 : string = "S" let v2 : string = "T" let v3 : string = "J" let v4 : string = $"{v0}{v1}{v2}{v3}" let v5 : string = "F" let v6 : string = $"{v0}{v1}{v5}{v3}" let v7 : string = "N" let v8 : string = $"{v0}{v7}{v5}{v3}" let v9 : string = $"{v0}{v7}{v2}{v3}" let v10 : string = "P" let v11 : string = $"{v0}{v1}{v2}{v10}" let v12 : string = $"{v0}{v1}{v5}{v10}" let v13 : string = $"{v0}{v7}{v5}{v10}" let v14 : string = $"{v0}{v7}{v2}{v10}" let v15 : string = "E" let v16 : string = $"{v15}{v1}{v2}{v10}" let v17 : string = $"{v15}{v1}{v5}{v10}" let v18 : string = $"{v15}{v7}{v5}{v10}" let v19 : string = $"{v15}{v7}{v2}{v10}" let v20 : string = $"{v15}{v1}{v2}{v3}" let v21 : string = $"{v15}{v1}{v5}{v3}" let v22 : string = $"{v15}{v7}{v5}{v3}" let v23 : string = $"{v15}{v7}{v2}{v3}" let v24 : string list = [] let v26 : string list = v23 :: v24 let v30 : string list = v22 :: v26 let v34 : string list = v21 :: v30 let v38 : string list = v20 :: v34 let v42 : string list = v19 :: v38 let v46 : string list = v18 :: v42 let v50 : string list = v17 :: v46 let v54 : string list = v16 :: v50 let v58 : string list = v14 :: v54 let v62 : string list = v13 :: v58 let v66 : string list = v12 :: v62 let v70 : string list = v11 :: v66 let v74 : string list = v9 :: v70 let v78 : string list = v8 :: v74 let v82 : string list = v6 :: v78 let v86 : string list = v4 :: v82 let v90 : (string list -> (string [])) = List.toArray let v91 : (string []) = v90 v86 let v94 : string = "ISTJ" let v95 : string = "ISFJ" let v96 : string = "INFJ" let v97 : string = "INTJ" let v98 : string = "ISTP" let v99 : string = "ISFP" let v100 : string = "INFP" let v101 : string = "INTP" let v102 : string = "ESTP" let v103 : string = "ESFP" let v104 : string = "ENFP" let v105 : string = "ENTP" let v106 : string = "ESTJ" let v107 : string = "ESFJ" let v108 : string = "ENFJ" let v109 : string = "ENTJ" let v110 : (string []) = [|v94; v95; v96; v97; v98; v99; v100; v101; v102; v103; v104; v105; v106; v107; v108; v109|] let v112 : bool = v91 = v110 let v116 : bool = if v112 then true else method1(v112) let v117 : string = "__assert_eq'" let v118 : string = method2(v117, v91, v110) let v120 : unit = () let v121 : (unit -> unit) = closure1(v118) let v122 : unit = (fun () -> v121 (); v120) () let v124 : bool = v116 = false if v124 then failwith<unit> v118 method0() { name = __assert_eq'; actual = [|"ISTJ"; "ISFJ"; "INFJ"; "INTJ"; "ISTP"; "ISFP"; "INFP"; "INTP"; "ESTP"; "ESFP"; "ENFP"; "ENTP"; "ESTJ"; "ESFJ"; "ENFJ"; "ENTJ"|]; expected = [|"ISTJ"; "ISFJ"; "INFJ"; "INTJ"; "ISTP"; "ISFP"; "INFP"; "INTP"; "ESTP"; "ESFP"; "ENFP"; "ENTP"; "ESTJ"; "ESFJ"; "ENFJ"; "ENTJ"|] }
In [ ]:
type PhonologicalFeature =
| VowelFeature of
height: Height
* backness: Backness
* roundedness: Roundedness
* tone: Option<Tone>
* stress: Option<Stress>
* length: Option<Length>
| ConsonantFeature of
place: PlaceOfArticulation
* manner: MannerOfArticulation
* voicing: Voicing
* length: Option<Length>
| VowelHarmonyFeature
| PitchAccentFeature
and Stress = Primary | Secondary
and Length = Long | Short | HalfLong
and Height =
| High | NearHigh | HighMid
| Mid | LowMid | NearLow
| Low
and Backness = Front | Central | Back
and Roundedness = Rounded | Unrounded
and PlaceOfArticulation =
| Bilabial | Labiodental | Dental
| Alveolar | Postalveolar | Retroflex
| Palatal | Velar | Uvular
| Pharyngeal | Epiglottal | Glottal
and MannerOfArticulation =
| Plosive | Nasal | Trill
| TapOrFlap | Fricative | LateralFricative
| Approximant | LateralApproximant
and Voicing = Voiced | Voiceless
and SecondaryArticulation =
| Labialization | Palatalization | Velarization
| Pharyngealization | Aspiration
and Tone =
| LevelTone of int
| ContourTone of int list
and MorphologicalFeature =
| RootFeature of string
| AffixFeature of AffixType * string
| IncorporationFeature of string * MorphologicalFeature
| NonConcatenativePattern of string * string
| AgglutinativeAffixFeature of AgglutinativeAffixType * string
| HonorificFeature of HonorificType * string
and AgglutinativeAffixType = Suffix | Prefix
and HonorificType = VerbHonorific | NounHonorific
and AffixType =
| Prefix | Suffix | Infix
| Circumfix
type SyntacticFeature =
| WordFeature of MorphologicalFeature list * LexicalCategory
| PhraseFeature of PhraseType * SyntacticFeature list
| GrammaticalRelation of GrammaticalRelationType * SyntacticFeature list
| SOVOrderFeature
| TopicCommentFeature
and GrammaticalRelationType =
| Ergative | Absolutive | Nominative
| Accusative
and LexicalCategory =
| Noun | Verb | Adjective
| Adverb | Pronoun | Preposition
| Conjunction | Determiner | Interjection
and PhraseType =
| NP | VP | AP
| PP | CP
and SemanticFeature =
| Meaning of string
| SemanticRole of SemanticRoleType * SemanticFeature
and SemanticRoleType =
| Agent | Patient | Instrument
| Location | Time | Cause
and PragmaticFeature =
| UseContext of string
| PolitenessLevel of Politeness
| SpeechAct of SpeechActType
| SpeechLevel of SpeechLevelType
and Politeness = Formal | Informal | Neutral
and SpeechActType =
| Assertive | Directive | Commissive
| Expressive | Declarative
and SpeechLevelType =
| FormalHigh | FormalLow | InformalHigh
| InformalLow | Neutral
type LinguisticFeature =
| Phonological of PhonologicalFeature
| Morphological of MorphologicalFeature
| Syntactic of SyntacticFeature
| Semantic of SemanticFeature
| Pragmatic of PragmaticFeature
type LanguageConstruct =
| LanguageElement of LinguisticFeature
| LanguageStructure of LanguageConstruct list
| TranslationElement of TranslationFeature
and TranslationFeature =
| LinkedPhonological of PhonologicalFeature * PhonologicalFeature
| LinkedMorphological of MorphologicalFeature * MorphologicalFeature
| LinkedSyntactic of SyntacticFeature * SyntacticFeature
| LinkedSemantic of SemanticFeature * SemanticFeature
type Discourse = DiscourseUnit of LanguageConstruct list
type LanguageModel =
| Model of discourse: Discourse
In [ ]:
let testEnglish =
Model(
DiscourseUnit [
LanguageElement (Phonological (ConsonantFeature (Alveolar, Nasal, Voiced, Some(HalfLong))));
LanguageElement (Phonological (VowelFeature (High, Front, Unrounded, Some(LevelTone 1), Some(Primary), Some(Short))));
LanguageElement (Phonological (VowelFeature (Low, Front, Unrounded, Some(LevelTone 2), Some(Secondary), Some(Long))));
LanguageElement (Phonological (ConsonantFeature (Velar, Plosive, Voiceless, Some(HalfLong))));
LanguageElement (Morphological (RootFeature "I"));
LanguageElement (Morphological (RootFeature "see"));
LanguageElement (Morphological (RootFeature "a"));
LanguageElement (Morphological (RootFeature "cat"));
LanguageElement (Syntactic (PhraseFeature (NP, [WordFeature ([RootFeature "I"], Pronoun)])));
LanguageElement (Syntactic (PhraseFeature (VP, [WordFeature ([RootFeature "see"], Verb)])));
LanguageElement (Syntactic (PhraseFeature (NP, [WordFeature ([RootFeature "a"; RootFeature "cat"], Noun)])));
LanguageElement (Semantic (Meaning "Perception act of a feline by the speaker"));
LanguageElement (Pragmatic (UseContext "Statement of an action being observed"))
]
)
let testPortuguese =
Model(
DiscourseUnit [
LanguageElement (Phonological (VowelFeature (High, Front, Unrounded, Some(LevelTone 1), Some(Primary), Some(Short))));
LanguageElement (Phonological (VowelFeature (Low, Front, Unrounded, Some(LevelTone 2), Some(Secondary), Some(Long))));
LanguageElement (Phonological (VowelFeature (Mid, Back, Rounded, Some(LevelTone 3), Some(Primary), Some(Short))));
LanguageElement (Phonological (ConsonantFeature (Velar, Plosive, Voiceless, Some(HalfLong))));
LanguageElement (Morphological (RootFeature "Eu"));
LanguageElement (Morphological (RootFeature "ver" |> ignore; AffixFeature (Suffix, "o")));
LanguageElement (Morphological (RootFeature "um"));
LanguageElement (Morphological (RootFeature "gato"));
LanguageElement (Syntactic (PhraseFeature (NP, [WordFeature ([RootFeature "Eu"], Pronoun)])));
LanguageElement (Syntactic (PhraseFeature (VP, [WordFeature ([RootFeature "vejo"], Verb)])));
LanguageElement (Syntactic (PhraseFeature (NP, [WordFeature ([RootFeature "um"; RootFeature "gato"], Noun)])));
LanguageElement (Semantic (Meaning "Ação de percepção de um felino pelo falante"));
LanguageElement (Pragmatic (UseContext "Declaração de uma ação sendo observada"))
]
)
let testKorean =
Model(
DiscourseUnit [
LanguageElement (Phonological (ConsonantFeature (Alveolar, Nasal, Voiced, Some(Short))));
LanguageElement (Phonological (VowelFeature (High, Back, Rounded, None, None, Some(Short))));
LanguageElement (Phonological (VowelFeature (Mid, Front, Unrounded, None, None, Some(Long))));
LanguageElement (Phonological (ConsonantFeature (Bilabial, Plosive, Voiceless, Some(Short))));
LanguageElement (Morphological (RootFeature "나"));
LanguageElement (Morphological (RootFeature "보다"));
LanguageElement (Morphological (AffixFeature (Suffix, "아")));
LanguageElement (Morphological (RootFeature "고양이"));
LanguageElement (Syntactic (PhraseFeature (NP, [WordFeature ([RootFeature "나"], Pronoun)])));
LanguageElement (Syntactic (PhraseFeature (VP, [WordFeature ([RootFeature "보다"; AffixFeature (Suffix, "아")], Verb)])));
LanguageElement (Syntactic (PhraseFeature (NP, [WordFeature ([RootFeature "고양이"], Noun)])));
LanguageElement (Semantic (Meaning "화자에 의한 고양이의 관찰 행위"));
LanguageElement (Pragmatic (UseContext "관찰되고 있는 행동의 진술"))
]
)
main¶
In [ ]:
inl main (_args : array_base string) =
0i32
inl main () =
$'let main args = !main args' : ()
In [ ]:
inl app () =
"test" |> console.write_line
0i32
inl main () =
print_static "<test>"
app
|> dyn
|> ignore
print_static "</test>"