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"
]
let rec method1 (v0 : bool) : bool = v0 and closure0 (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 v25 : string list = v4 :: v24 let v28 : string list = v6 :: v25 let v31 : string list = v8 :: v28 let v34 : string list = v9 :: v31 let v37 : string list = v11 :: v34 let v40 : string list = v12 :: v37 let v43 : string list = v13 :: v40 let v46 : string list = v14 :: v43 let v49 : string list = v16 :: v46 let v52 : string list = v17 :: v49 let v55 : string list = v18 :: v52 let v58 : string list = v19 :: v55 let v61 : string list = v20 :: v58 let v64 : string list = v21 :: v61 let v67 : string list = v22 :: v64 let v70 : string list = v23 :: v67 let v73 : (string list -> (string [])) = List.toArray let v74 : (string []) = v73 v70 let v77 : string = "ISTJ" let v78 : string = "ISFJ" let v79 : string = "INFJ" let v80 : string = "INTJ" let v81 : string = "ISTP" let v82 : string = "ISFP" let v83 : string = "INFP" let v84 : string = "INTP" let v85 : string = "ESTP" let v86 : string = "ESFP" let v87 : string = "ENFP" let v88 : string = "ENTP" let v89 : string = "ESTJ" let v90 : string = "ESFJ" let v91 : string = "ENFJ" let v92 : string = "ENTJ" let v93 : (string []) = [|v77; v78; v79; v80; v81; v82; v83; v84; v85; v86; v87; v88; v89; v90; v91; v92|] let v94 : bool = v74 = v93 let v98 : bool = if v94 then true else method1(v94) let v99 : string = "__assert_eq'" let v100 : string = $"{v99} / actual: %A{v74} / expected: %A{v93}" let v103 : unit = () let v104 : (unit -> unit) = closure0(v100) let v105 : unit = (fun () -> v104 (); v103) () let v107 : bool = v98 = false if v107 then failwith<unit> v100 method0() __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"
]
let rec method1 (v0 : bool) : bool = v0 and closure0 (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 v25 : string list = v23 :: v24 let v28 : string list = v22 :: v25 let v31 : string list = v21 :: v28 let v34 : string list = v20 :: v31 let v37 : string list = v19 :: v34 let v40 : string list = v18 :: v37 let v43 : string list = v17 :: v40 let v46 : string list = v16 :: v43 let v49 : string list = v14 :: v46 let v52 : string list = v13 :: v49 let v55 : string list = v12 :: v52 let v58 : string list = v11 :: v55 let v61 : string list = v9 :: v58 let v64 : string list = v8 :: v61 let v67 : string list = v6 :: v64 let v70 : string list = v4 :: v67 let v73 : (string list -> (string [])) = List.toArray let v74 : (string []) = v73 v70 let v77 : string = "ISTJ" let v78 : string = "ISFJ" let v79 : string = "INFJ" let v80 : string = "INTJ" let v81 : string = "ISTP" let v82 : string = "ISFP" let v83 : string = "INFP" let v84 : string = "INTP" let v85 : string = "ESTP" let v86 : string = "ESFP" let v87 : string = "ENFP" let v88 : string = "ENTP" let v89 : string = "ESTJ" let v90 : string = "ESFJ" let v91 : string = "ENFJ" let v92 : string = "ENTJ" let v93 : (string []) = [|v77; v78; v79; v80; v81; v82; v83; v84; v85; v86; v87; v88; v89; v90; v91; v92|] let v94 : bool = v74 = v93 let v98 : bool = if v94 then true else method1(v94) let v99 : string = "__assert_eq'" let v100 : string = $"{v99} / actual: %A{v74} / expected: %A{v93}" let v103 : unit = () let v104 : (unit -> unit) = closure0(v100) let v105 : unit = (fun () -> v104 (); v103) () let v107 : bool = v98 = false if v107 then failwith<unit> v100 method0() __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"
]
let rec method1 (v0 : bool) : bool = v0 and closure0 (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 v25 : string list = v23 :: v24 let v28 : string list = v22 :: v25 let v31 : string list = v21 :: v28 let v34 : string list = v20 :: v31 let v37 : string list = v19 :: v34 let v40 : string list = v18 :: v37 let v43 : string list = v17 :: v40 let v46 : string list = v16 :: v43 let v49 : string list = v14 :: v46 let v52 : string list = v13 :: v49 let v55 : string list = v12 :: v52 let v58 : string list = v11 :: v55 let v61 : string list = v9 :: v58 let v64 : string list = v8 :: v61 let v67 : string list = v6 :: v64 let v70 : string list = v4 :: v67 let v73 : (string list -> (string [])) = List.toArray let v74 : (string []) = v73 v70 let v77 : string = "ISTJ" let v78 : string = "ISFJ" let v79 : string = "INFJ" let v80 : string = "INTJ" let v81 : string = "ISTP" let v82 : string = "ISFP" let v83 : string = "INFP" let v84 : string = "INTP" let v85 : string = "ESTP" let v86 : string = "ESFP" let v87 : string = "ENFP" let v88 : string = "ENTP" let v89 : string = "ESTJ" let v90 : string = "ESFJ" let v91 : string = "ENFJ" let v92 : string = "ENTJ" let v93 : (string []) = [|v77; v78; v79; v80; v81; v82; v83; v84; v85; v86; v87; v88; v89; v90; v91; v92|] let v94 : bool = v74 = v93 let v98 : bool = if v94 then true else method1(v94) let v99 : string = "__assert_eq'" let v100 : string = $"{v99} / actual: %A{v74} / expected: %A{v93}" let v103 : unit = () let v104 : (unit -> unit) = closure0(v100) let v105 : unit = (fun () -> v104 (); v103) () let v107 : bool = v98 = false if v107 then failwith<unit> v100 method0() __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>"