Oktonionų, kvaternionų ir kompleksinių skaičių simbolinis formatas ================================================================== NEFORMALUS APRAŠYMAS ==================== Duomenų sraute (hiper)kompleksiniai skaičiai (oktonionai, kvaternionai ar paprasti kompleksiniai skaičiai; toliau vadinami tiesiog h-skaičiais) atvaizduojami kaip menamųjų vienetų tiesinės kombinacijos su realiaisiais koeficientais. H-skaičiai eilutėse atskiriami bet kokiu tarpų ar tabuliacijų skaičiumi. Kiekvienoje duomenų eilutėje gali būti vienas, du ar daugiau h-skaičių, priklausomai nuo to, kokia yra juos naudojančios programos semantika. Realūs skaičiai užrašomi, naudojant programavimo ar duomenų kalbose paplitusią realiųjų skaičių sintaksę. Failuose leidžiami komentarai. Komentarai yra eilutės, kurių pirmas simbolis yra „#“. Tuščios eilutės leistinos ir turi būti ignoruojamos. LABIAU FORMALIZUOTAS APRAŠYMAS ============================== Tekste minimi simboliai interpretuotini taip: -- Tarpo simbolis: ' ' (ASCII dešimtainis kodas 32, šešioliktainis kodas 0x20, Unikodo simbolis U+0020); -- Tabuliacijos simbolis: HT (C kalbos seka "\t", ASCII dešimtainis kodas 9, šešioliktainis kodas 0x09, Unikodo simbolis U+0009); -- Grįžimo simbolis: CR, (C kalbos seka "\r", ASCII dešimtainis kodas 13, šešioliktainis kodas 0D, Unikodo simbolis U+000D); -- Numerio simbolis: '#' (ASCII dešimtainis kodas 35, šešioliktainis kodas 0x23, Unikodo simbolis U+0023); -- Tušti simboliai: tarpo, tabuliacijos arba grįžimo simboliai; -- Tušti skirtukai: tarpo arba tabuliacijos simboliai. H-skaičiai duomenų sraute pateikiami tokiu pavidalu: -- eilutės, kurių *pirmas simbolis* yra '#' (numerio simbolis, arba "grotelės") talpina komentarus; tokios eilutės turi būti ignoruojamos; -- tuščios eilutės, t.y. eilutės neturinčios nei vieno simbolio, arba tik tuščius simbolius (angl. "whitespace", t.y. tarpo, tabuliacijos arba "\r" simbolius) turi būti tyliai ignoruojamos; -- visos kitos eilutės yra duomenų eilutės; kiekvienoje eilutėje užrašyti vienas ar keli h-skaičiai kaip menamųjų vienetų tiesinė kombinacija. Tarpų h-skaičiaus eilutėje negali būti; tarpai gali būti naudojami keliems h-skaičiams atskirti. Kompleksinių skaičių menamajam vienetui naudojamas simbolis „i“; kvaternionų menamiesiems vienetams naudojami simboliai „i“, „j“ ir „k“ (su sąryšiais i * i = j * j = k * k = i * j * k = -1). Oktonionams naudojami simboliai „i“, „j“, „k“, „l“, „il“, „jl“, „kl“, su natūraliais sąryšiais i*l = il, il * i = l, i*j = -j*i ir t.t. (žr. oktonionų daugybos lentelę [2]). Tiesinės kombinacijos užrašomos kaip sumos/skirtumai vienetų su prieš juos nurodytai realiais koeficientais. Pirmasis, realus vienetas niekaip nežymimas, tiesiog nurodomas jo koeficientas, o tolimesni vienetai rašomi realus skaičius ir po jo sekantis menamojo vieneto simbolis. Koeficientas ir menamasis vienetas rašomi vienas paskui kitą be tarpo ir be jokio operacijos simbolio, pvz.: „1.2j“ -- Realūs skaičiai yra koeficientai prie menamųjų vienetų, kurie atitinka PCRE [1] reguliarią išraišką: $RN='((\d+\.?|\d*\.\d+)([Ee][-+]?\d+)?)' Interpretacijai naudojama įprasta programavimo kalbų (pvz. Perl) realių skaičių semantika. NB: FORTRAN'o eksponentės skirtukas „D“ (e.g. 6.02D+23) *nenaudojamas*. -- Jei realiųjų skaičių sintaksę aprašanti reguliari išraiška priskirta Perl'o kintamajam $RN, tada H-skaičiai atitinka šias reguliarias išraiškas (Perl sintakse): $TERM="(${RN}(|${UNITS})|${UNITS})" $HNUMBER="[-+]?${TERM}([-+]${TERM})*" kur $UNITS reguliarios išraiškos kintamasis apibrėžtas taip: --- kompleksiniams skaičiams: $UNITS='i' --- kvaternionams: $UNITS='i|j|k' --- oktonionams: $UNITS='i|j|k|l|il|jl|kl' Bandomosios programos reguliariosioms išraiškoms tikrinti pavyzdys ('bash' terpėje): echo '-0.5-i+j+k' \ | perl -ne ' $RN='"'"'(?:(\d+\.?|\d*\.\d+)([Ee][-+]?\d+)?)'"'"'; $UNITS="i|j|k"; $TERM="(${RN}(|${UNITS})|${UNITS})"; $HNUMBER="[-+]?${TERM}([-+]${TERM})*"; $,=", "; print $_ if /^${HNUMBER}$/x' -- Jei duomenų sraute nurodomas ne vienas, o keli h-skaičiai, tarp jų paliekami vienas ar keli tušti skirtukai. Pagal šias reguliariąsias išraiškas, h-skaičiuose vienetai su koeficientais gali būti išdėstyti bet kokia tvarka. Kito sintaksės ypatybės: --- tam tikri menamieji vienetai gali būti praleisti (tada jų koeficientas laikomas nuliu); --- kai kurie menamieji vienetai gali neturėti koeficiento (tada jų koeficientas laikomas +1 arba -1, priklausomai nuo prieš juos einančio ženklo); --- ženklas prieš visą h-skaičių gali būti praleistas (tada jis laikomas teigiamu, t.y. jo pirmasis koeficientas yra +1); --- kai kurie menamieji vienetai gali pasikartoti eilę kartų, tada jų koeficientai su atitinkamais ženklais sumuojasi. H-skaičių, užrašytų pagal aukščiau apibrėžtą sintaksę, pavyzdžiai: 1+2i # Kompleksinis skaičius, kvaternionas arba oktonionas i # menamasis vienetas i; == 0+1i -k # kvaternionas arba oktonionas, 0+0i+0j-1k il # oktonionas 0+1il 0.5+0.33i-1e-7j-k # kvaternionas 0.5i+0.33j+0.55k # grynai vektorinis kvaternionas Duomenų srauto pavyzdys: -- failo (srauto), turinčio po vieną oktonioną vienoje eilutėje, pavyzdys: # Pirma failo 'oktonionai.dat' eilutė; duomenys: 1+2i+3j+4k+5l+6il+7e7jl+8.0kl -1+2i+3j+4k+5l+6il-111jl+4.0kl # Paskutinė failo 'oktonionai.dat' eilutė. -- failo (srauto), turinčio po tris kvaternionus vienoje eilutėje, pavyzdys: # Pirma failo 'kvaternionai3.dat' eilutė; duomenys: 1+2i+7e7j+8.0k 11.1+2i+7e7j+8.0k 1 -1+2i-111j+4.0k -12.0+2i-111j+4.0k 2i+3j+4k # Paskutinė failo 'kvaternionai3.dat' eilutė. Pastaba: skaitomumui pagerinti, tarp atskirų h-skaičių įvesti papildomi tarpai. Šie papildomi tarpai nėra reikšminiai, programa turi skaityti duomenis, net jei tarpų nebūtų. ŠALTINIŲ NUORODOS ================= 1. Wikipedia (2020) Perl Compatible Regular Expressions. https://en.wikipedia.org/wiki/Perl_Compatible_Regular_Expressions [žiūrėta 2020-02-16 11:29:10 EET] 2. Wikipedia (2020) Алгебра Кэли. https://ru.wikipedia.org/wiki/Алгебра Кэли [žiūrėta 2020-02-16 11:29:10 EET]