Portál AbcLinuxu, 1. května 2025 05:52

Naučte mě Perl 6, II. Kontext

9.4.2016 22:08 | Přečteno: 1679× | Perl | Výběrový blog | poslední úprava: 10.4.2016 11:00

V dnešní blogu o Perlu 6 se budu zabývat kontextem, ukáži jak ho vynutit, zmást a možné využití.

II. Kontext

Perl na základě toho, co je po něm vyžadováno, dokáže hodnotu předat v požadovaném kontextu. Tedy např. máme řetězec s číslem my $a = '121' tak na něj lze použít číselný operátor a naopak číslo můžeme přímo vypsat jako řetězec say $a + $a.

Kontext a jeho příklady v Perlu 6

V Perlu 6 máme mnoho typů kontextu. Vynutit je můžeme jednak pomocí speciálních metod, podprogramů, operátorů ( pamatujete na I. kapitolu ), nebo si je vynucují některé podprogramy.

Ukažme si pár příkladů
my @a = ( 1, 2, 5, );
dd @a.Str;       #"1 2 5"
dd @a.Numeric;   #3 -- počet prvků
dd @a.so;        #Bool::True
dd @a.gist;      #"[1 2 5]"
dd @a.perl;      #"[1, 2, 5]"

my Str $a = '234';
dd $a.list;      #("234",)
dd $a.Numeric;   #234
dd $a.so;        #Bool::True
dd $a.gist;      #"234"
dd $a.perl;      #"\"234\""

my Rat $r = 22/7;
dd $r.Str;       #"3.142857"
dd $r.perl;      #"<22/7>"

say ( '', 0 )>>.so, ().so; #(False False)False
say @a + $a;               #237
say @a ~ $r;               #1 2 53.142857
Zastavil bych se u .gist, který by měl reprezentovat řetězec v dobře čitelné formě pro lidi, a idea .perl by měl být v řetězci Perl kódu, pomocí kterého přes EVAL dostaneme původní hodnotu.

Vynucujeme kontext

Pojďme si napsat podprogram, který bude vynucovat parametry v celých číslech. Mějme definici operátoru na celých číslech
sub infix:<⊕> ( Int $a, Int $b ) {
    $a + $b + 1;
}
Tento operátor vrátí požadovanou hodnotu, pokud oba parametry budou typu Int a jinak vyhodí chybu. Tedy můžeme použít 12 ⊕ 10, ale už ne '12' ⊕ 23/12. Perl 6 ale umí snadno řetězec '12' i racionální číslo 23/12 interpretovat jako Int. Náprava je snadná
multi sub infix:<⊕> ( Int $a, Int $b ) {
    $a + $b + 1;
}

multi sub infix:<⊕> ( Any $a, Any $b ) {
    $a.Int ⊕ $b.Int
}
(Použili jsme další mocnou zbraň Perlu 6 a to multi pro definici podprogramů.)

Mateme kontext

V této části ukážeme jak ovlivnit hodnoty pro jednotlivé kontexty. Pokud chceme definovat všechny kontexty podle sebe v Perlu 6 to můžeme snadno udělat pomocí (anonymní) třídy.
my $c = class {
    method Numeric { 42 };
    method gist    { 'čtyřicetdva' };
    method Str     { sprintf " %.2f ", self.Numeric };
};        

say $c;             #čtyřicetdva
say $c + 12;        #54
say $c ~ 'CZK';     # 42.00 CZK
Pokud bude chtít pouze pozměnit některý kontext můžeme to udělat pomocí but.
role length {
    method Numeric {
        self.chars
    }
}

my $s = 'ahoj' but length;
say +$s;                       #4
 
my $m = '123';
say +$m;                       #123

my $n = '123' but length;
say +$n;                       #3

my @p := [];
say ?@p;                       #False

my @q := [] but True;
say ?@q;                       #True

#pro zajímavost, berte prosím s rezervou, jednak je to šílenost a závisí to na implementaci
my $o = 123 but length;
say +$o;                       #3                
say 0 + $o, -$o;               #123-123

Využití

Nyní zkusme kontext využít při definici vlastní třídy. Zavedeme třídu graph, pomocí které budeme reprezentovat orientované grafy. (Třídu budu vypisovat po částech a nakonec uvedu kompletní definici třídy i s příklady a výstupem.)

Třída bude mít 2 atributy uzly a hrany,
class graph {
    has @.vertices;
    has @.edges;
kde uzly budou bude pole názvů, např. 1, 2, 3 a hrany bude pole párů např. 1 => 2, 3 => 1,. Definice pak bude vypadat, např. pro kompletní orientovaný graf na pěti uzlech, takto
my graph $k5 .= new: :vertices(^5), :edges( ^5 X=> ^5 );
Všimněte si jak se lze v Perlu 6, pomocí .= vyhnout opakovanému napsání názvu třídy. Operátor X je cross operátor, něco jako kartézský součin.

Dále definujme metodu gist, pro lidsky vřelý řetězec. Vypíše 10 náhodných hran.
method gist {
    my @ge = @!edges.map({ .key ~ '→' ~ .value });
    join ', ', @ge.elems <= 10 ?? @ge !! ( @ge.pick(10), '…' ); 
};
Místo @ge.elems <= 10 by jsme mohli napsat i @ge <= 10, pamatujete na numerický kontext pole.

Nyní můžeme použít na objekt naši třídy say
  say $k5;
  #2→3, 0→0, 0→3, 4→4, 4→2, 3→4, 2→4, 1→3, 0→4, 4→0, …
A také definujme metody Str pro operace s řetězci a metodu perl pro replikaci třídy pomocí Perlu 6.

Celý příklad
class graph {
    has @.vertices;
    has @.edges;

    method gist {
        my @ge = @!edges.map({ .key ~ '→' ~ .value });
        join ', ', @ge.elems <= 10 ?? @ge !! ( @ge.pick(10), '…' ); 
    };

    method Str {
        join "\n", 'Vertices:', @!vertices.Str, 'Edges:', @!edges.join( "\n" );
    };

    method perl {
        [~] 'graph.new( ',  :vertices( |@!vertices ).perl, ', ', :edges( |@!edges ).perl, ' )';
    };
                   
};

my graph $k5 .= new: :vertices(^5), :edges( ^5 X=> ^5 );
say 'gist:';
say $k5;
say 'Str:';
put $k5;
say 'perl:';
say $k5.perl;

say 'Ověření perl:';
use MONKEY-SEE-NO-EVAL;
say EVAL( $k5.perl );
Výstup:
gist:
2→4, 2→3, 2→1, 3→1, 0→4, 1→4, 4→4, 0→3, 3→0, 0→0, …
Str:
Vertices:
0 1 2 3 4
Edges:
0	0
0	1
0	2
0	3
0	4
1	0
1	1
1	2
1	3
1	4
2	0
2	1
2	2
2	3
2	4
3	0
3	1
3	2
3	3
3	4
4	0
4	1
4	2
4	3
4	4
perl:
graph.new( :vertices(slip(0, 1, 2, 3, 4)), :edges(slip(0 => 0, 0 => 1, 0 => 2, 0 => 3, 0 => 4, 1 => 0, 1 => 1, 1 => 2, 1 => 3, 1 => 4, 2 => 0, 2 => 1, 2 => 2, 2 => 3, 2 => 4, 3 => 0, 3 => 1, 3 => 2, 3 => 3, 3 => 4, 4 => 0, 4 => 1, 4 => 2, 4 => 3, 4 => 4)) )
Ověření perl:
0→1, 0→0, 0→2, 1→2, 3→2, 3→4, 0→3, 0→4, 2→0, 4→4, …

Závěr

Princip kontextu je z mého pohledu jakýmsi doplňkem polymorfismu, kde místo aby se operace přizpůsobovala hodnotám, tak hodnoty se přizpůsobují operaci. Jak je to v jiných jazycích s tímto principem? Napadá vás nějaký pěkný příklad jak tento princip využít?        

Hodnocení: 100 %

        špatnédobré        

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

Komentáře

Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře. , Tisk

Vložit další komentář

9.4.2016 23:40 Yenda
Rozbalit Rozbalit vše Re: Naučte mě Perl 6, II. Kontext
Odpovědět | Sbalit | Link | Blokovat | Admin
To je moc dobře, že jde předefinovat operátor plus včetně, jak doufám, jeho priority. Je moc dobře, že jdou používat japonský znaky jako operátory, ještě bych zavedl bílé unicode znaky jako funkce a výpis integeru určitě půjde nastavit tak, aby se zobrazoval v římských cislovkach. Když blázinec, tak poradnej, včetně alegorickych vozu, tisíce slonů, baletkama, transsexualnima kurvama s fetisem pro chciply lososy a hektolitry kvalitního šumivé ho vína z Polska.

Je fakt, že perverse přitahuje publicitu, ale udělat z jazyka levnou zmalovanou stetku z omicronu perseiy 3 s různým přízvukem a elektronickou vagíny s Bluetooth jen because we can cancan mi prijde docela kentus.
wamba avatar 10.4.2016 00:27 wamba | skóre: 38 | blog: wamba
Rozbalit Rozbalit vše Re: Naučte mě Perl 6, II. Kontext
Operátor plus tam nikde není předefinován. Nicméně tam dělám ještě hloupější věc měním číslu numerický kontext. Ona je otázka, jestli nějakou věc pro dobro programátorů zakázat (v tomhle Perl nikdy nevynikal), nebo to umožnit a říci jim, že to nemají používat, popř. je nechat (někdy i bolestivou cestou), aby na to přišli. Může se stát, že ta zakázaná věc bude v nějakých situacích užitečná a pak se bude vymýšlet obezlička na obezličku.
This would have been so hard to fix when you don't know that there is in fact an easy fix.
10.4.2016 01:16 Yenda
Rozbalit Rozbalit vše Re: Naučte mě Perl 6, II. Kontext
Operátor plus byl tuším predefinovan minule, ne? Nebo by alespoň určitě předefinovat šel, ne? Nenech se mýlit, nic proti tobě, oceňuji ten seriál a tvoje úsilí, které tomu venujes. Už se těším na to, co bude příště. Jen nechápu smysl existence takového jazyka (kromě toho, že je to bezva technologická masturbace).

Btw, těším se na díl o unicode - někdo to v souvislosti s perle 6 zmiňoval minule. Například by mne zajímalo, jak se v unicode v perlu řeší uppercase/lowercase. Například v turectine upper('i') není I. A nebo \w v regularnich vyrazech? A podobných problémů je víc. Je hezké, kdyz jazyk umožňuje uživatelům nejenom ustrelit si hlavu, ještě je to prezentováno jako hlavní selling point, ale takových jazyků je spousta. Jazyky, které by uživateli naopak pomohl dělat věci správně jsou poslední dobou jaksi nedostatkove zboží. Zpracovavam texty v cca 20 jazykach (různý znakový sady od cantonese po amhari) a nakonec spoustu věcí dělám ručně (přes filtry v icu) a zatím jsem bohužel nenašel žádný prostředek jak tohle zvládnout efektivněji.
10.4.2016 07:31 ::: | skóre: 14 | blog: e_lama
Rozbalit Rozbalit vše Re: Naučte mě Perl 6, II. Kontext
Ty nechapes k cemu muze byt dobre pretizeni operatoru + ?

To nejsi programator, ze?

wamba avatar 10.4.2016 09:53 wamba | skóre: 38 | blog: wamba
Rozbalit Rozbalit vše Re: Naučte mě Perl 6, II. Kontext
Předpokládám, že nenarážel na to když + použijeme jako operátor pro vlastní objekty. To jde v Perlu 6 snadno
multi sub infix:<+> ( graph $a, graph $b ) {
   $a.gist~ "\n" ~ $b.gist; 
}
say $k5 + $k5;
ale na to, když bychom chtěli předefinovat +, např. na Int, to mě Perl 6 vyhodil chybu s tím, že jsem příliš abiciózní.

Na Rat to kupodivu prošlo
multi sub infix:<+> ( Rat $a, Rat $b ) {
    $a * $b
}

my Rat $a = 1/1;
my Rat $b = 2/1;
say $a + $b + 5;               #7
ale není těžké přijít na to, že to není dobrý nápad. Mimochodem původně jsem tam na místo $a * $b měl $a + $b + 1 a úspěšně jsem se dostal do nekonečné rekurze. Ten výsledek $a + $b + 5, který je 7, může být pro leckoho také překvapivý.
This would have been so hard to fix when you don't know that there is in fact an easy fix.
wamba avatar 10.4.2016 10:24 wamba | skóre: 38 | blog: wamba
Rozbalit Rozbalit vše Re: Naučte mě Perl 6, II. Kontext
K operátoru + se vyjadřuji níže. Děkuji za ocenění. Já jsem zase rád, že někoho moje blogy potěšili.

Co se týká unicode, tak jsem zatím neplánoval udělat o něm díl. Nějak hlouběji jsem do toho zatím nepronikal. Samozřejmě jsem občas na to narazil např. prezentace Normal from grapheme. Za mě je zatím přínos o proti Perlu 5 to, že se vyhnu encode a decode. Na to, že bych se na některé věci s unicode (nejen v Perlu) neměl spoléhat, jsem se dozvěděl v diskuzi pod minulým článkem.

Co se týče smyslu Perlu 6, tak bych zkrátka řekl, že tvůrci a komunita (nebo alespoň část) Perlu, měla pocit, že je potřeba nový jazyk. Otázka je co znamená "pomoci dělat věci správně", jestli to znamená umožnit snadno dělat tyto věci, i třeba přesto, že půjdou snadno děla i věci špatně, nebo nějakým způsobem je vynucovat. Pro mě Perl 6 není jeden z mnoha.
This would have been so hard to fix when you don't know that there is in fact an easy fix.
10.4.2016 11:17 Vilda
Rozbalit Rozbalit vše Re: Naučte mě Perl 6, II. Kontext
tak bych zkrátka řekl, že tvůrci a komunita (nebo alespoň část) Perlu, měla pocit, že je potřeba nový jazyk.
Byl to Tim O’Reilly, ktery potreboval dalsi knihy o Perlu (nejlepe novou verzi) a Larry Wall mu to slibil. Jenom se nejak nedohodli, jak dlouho to bude trvat.
11.4.2016 13:26 Martin Mareš
Rozbalit Rozbalit vše Re: Naučte mě Perl 6, II. Kontext
Tohle nejsou ani tak problémy podpory Unicode, jako spíš podpory pro locales. Návrh Perlu6 počítá s tím, že půjde zapnout (lexikálně lokálně) zpracování regexů a pár dalších věcí v kontextu daného locale. Nakolik to už je implementované, to nevím.

Každopádně má P6 dostatečné prostředky na to, abyste si chování pro konkrétní jazyk podle potřeby (do|pře)definoval.
11.4.2016 13:15 Martin Mareš
Rozbalit Rozbalit vše Re: Naučte mě Perl 6, II. Kontext
To, že něco v daném jazyku lze, ještě přeci neznamená, že je to rozumné používat na doraz. Třeba Céčkový preprocesor je turingovsky úplný a mohu v něm spočítat cokoliv, co v Céčku samotném, ale přesto mám (většinou) dost soudnosti na to, abych to neudělal.

Naopak si myslím, že je dobře, když je jazyk rozšiřitelný v maximálním možném rozsahu, místo aby někdo vytyčoval nějakou umělou (a většinou dost křivolakou) hranici toho, co se ještě smí. Perl 6 je z většiny nadefinovaný sám v sobě, takže je naprosto přirozené, že se dá předefinovat cokoliv. Nějak to omezovat by bylo ošklivé a dříve či později nepraktické.

Pokud mezi vaše oblíbené noční můry patří, že vám někdo za bezměsíčné noci potají předefinuje plus, můžete si samozřejmě napsat jednoduchý modul, který to explicitně zakáže. Jazyk vám k tomu dává dostatek prostředků :)

Mimochodem, předefinovat plus nějakému standardnímu číselnému typu může být dokonce užitečné -- představte si, že chcete u floatů analyzovat zakrouhlovací chyby. Jeden z hezkých způsobů, jak to zařídit, je během ladění programu předefinovat floatům všechny operace tak, aby udržovaly statistiky o zaokrouhlování. Ještě elegentnější samozřejmě je vyměnit standardní floatový typ za nějaký odvozený s patřičným ladicím kódem.
13.4.2016 03:28 Emil Zátopek
Rozbalit Rozbalit vše Re: Naučte mě Perl 6, II. Kontext
„Pokud mezi vaše oblíbené noční můry patří, že vám někdo za bezměsíčné noci potají předefinuje plus, můžete si samozřejmě napsat jednoduchý modul, který to explicitně zakáže.“

Jdu programovat modul do perlu, který explicitně zakáže někomu zakázat předefinování plusu. :-) Všechny ostatní prosím, aby mi mou práci nenarušovali psaním modulu, který by v perlu zakázal zakázání zákazu předefinování plusu.

„Mimochodem, předefinovat plus nějakému standardnímu číselnému typu může být dokonce užitečné -- představte si, že chcete u floatů analyzovat zakrouhlovací chyby. Jeden z hezkých způsobů, jak to zařídit, je během ladění programu předefinovat floatům všechny operace tak, aby udržovaly statistiky o zaokrouhlování.“

Jestli ony ty zaokrouhlovací chyby nevznikají u naprosto všech operací. Proč tedy nevyměnit všech 3685 předefinovaných operátorů v perlu.

10.4.2016 08:19 pc2005 | skóre: 38 | blog: GardenOfEdenConfiguration | liberec
Rozbalit Rozbalit vše Re: Naučte mě Perl 6, II. Kontext
Odpovědět | Sbalit | Link | Blokovat | Admin
Ten XOR symbol :-D.
Intel meltdown a = arr[x[0]&1]; karma | 帮帮我,我被锁在中国房
wamba avatar 10.4.2016 10:35 wamba | skóre: 38 | blog: wamba
Rozbalit Rozbalit vše Re: Naučte mě Perl 6, II. Kontext
Teď si nejsem jist, na co narážíte, zda na něco v blogu (nejsem si vědom, že by tam xor byl někde použit). Nebo na něco přímo z dokumentace. Možná že se jedná o X=>, nebo ?? !!. Budu rád, když to upřesníte, abych případně mohl reagovat.
This would have been so hard to fix when you don't know that there is in fact an easy fix.
10.4.2016 10:40 ::: | skóre: 14 | blog: e_lama
Rozbalit Rozbalit vše Re: Naučte mě Perl 6, II. Kontext
plus v kruhu se casto pouziva jako xor :-)
wamba avatar 10.4.2016 11:02 wamba | skóre: 38 | blog: wamba
Rozbalit Rozbalit vše Re: Naučte mě Perl 6, II. Kontext
Děkuji za vysvětlení, já jsem byl zvyklý používat jako binární operaci v různých strukturách a netušil jsem, že si to někdo bude automaticky spojovat s xor. Tak pokud je to matoucí, tak se omlouvám. Kdyby to bylo příliš matoucí tak to můžu v blogu změnit, popř. na to upozornit, ale to já nedokáži posoudit. Nahradil jsem
definici operátoru na celých číslech
za
definici operátoru ⊕ na celých číslech
tak snad už to bude jasnější.
This would have been so hard to fix when you don't know that there is in fact an easy fix.
⧠ A = 0 avatar 11.4.2016 10:09 ⧠ A = 0 | skóre: 11 | blog: Technokratovo_zrcadlo | Helsinki
Rozbalit Rozbalit vše Re: Naučte mě Perl 6, II. Kontext
Odpovědět | Sbalit | Link | Blokovat | Admin
Jak moc je omezená množina znaků, které lze použít jako operátory? A co identifikátory?
Nevolte zmrdy.
⧠ A = 0 avatar 11.4.2016 10:12 ⧠ A = 0 | skóre: 11 | blog: Technokratovo_zrcadlo | Helsinki
Rozbalit Rozbalit vše Re: Naučte mě Perl 6, II. Kontext
(Mně by však ke spokojenosti bohatě stačilo, kdyby třeba gcc začal respektovat standardní C.)
Nevolte zmrdy.
12.4.2016 00:35 pc2005 | skóre: 38 | blog: GardenOfEdenConfiguration | liberec
Rozbalit Rozbalit vše Re: Naučte mě Perl 6, II. Kontext
Co chybí oproti -std=iso9899:2011 ?
⧠ A = 0 avatar 12.4.2016 00:56 ⧠ A = 0 | skóre: 11 | blog: Technokratovo_zrcadlo | Helsinki
Rozbalit Rozbalit vše Re: Naučte mě Perl 6, II. Kontext
Dodatek D. Ale nedal bych ruku do ohně za to, že to nejde ani v aktuální versi (teď si to zrovna nemám kde vyzkoušet).
Nevolte zmrdy.
12.4.2016 01:58 pc2005 | skóre: 38 | blog: GardenOfEdenConfiguration | liberec
Rozbalit Rozbalit vše Re: Naučte mě Perl 6, II. Kontext
Aha, ale zase unicode znaky v céčku (a časem asi i v kernelu), no nevím nevím. To by se ladilo dost špatně.
⧠ A = 0 avatar 12.4.2016 02:20 ⧠ A = 0 | skóre: 11 | blog: Technokratovo_zrcadlo | Helsinki
Rozbalit Rozbalit vše Re: Naučte mě Perl 6, II. Kontext
To mi připadá jako jen nějaký technokonservativní pathos. Proč by to mělo záporný vliv na ladění (pominu-li extrémní příklady jako záměrně obfuskovaný kód používáním podobně vypadajících znaků z různých abeced)? Příznivci javistické ukecanosti se mnou možná souhlasit nebudou, ale v mnoha případech to naopak značně zlepšuje čitelnost. Kdo viděl typický fortranovský kód (a zároveň nepatří do oné sekty), asi pochopí.
Nevolte zmrdy.
12.4.2016 05:48 pc2005 | skóre: 38 | blog: GardenOfEdenConfiguration | liberec
Rozbalit Rozbalit vše Re: Naučte mě Perl 6, II. Kontext
Kernel patche jsou checkovaný perlem ;-).

A třeba čínsky bych se moc učit nechtěl :-D.
wamba avatar 11.4.2016 12:18 wamba | skóre: 38 | blog: wamba
Rozbalit Rozbalit vše Re: Naučte mě Perl 6, II. Kontext
U identifikátorů (pravděpodobně se to týká i názvů mehtod a podprogramů) se mi to podařilo najít v Synopsi 15. Co je co jsem našel v Programming with Unicode. Zkráceně: alfanumerické znaky a ',-,_ (ne samostatně) a nějaký druh mezer (ne na začátku).

Pro operátory taková omezení neplatí, přesně se mi to nepodařilo najít.

Raději pro představu ukáži pár příkladů co funguje
 
sub postfix:<γ> ($ ) {
    say "hi"
};

my $απ='aa';
($απ)γ;       
'aa'γ;
my \δ = 21;
say δ;

sub infix:<.⊕.> ( $α, $β ) {
    $α + $β;
};

my $ĥoroj=12;
my $ℵ=10;
say $ĥoroj.⊕.$ℵ;
This would have been so hard to fix when you don't know that there is in fact an easy fix.
⧠ A = 0 avatar 11.4.2016 13:30 ⧠ A = 0 | skóre: 11 | blog: Technokratovo_zrcadlo | Helsinki
Rozbalit Rozbalit vše Re: Naučte mě Perl 6, II. Kontext
Dík za odkazy. Čili pro identifikátory nelze použít kombinační znaky, takže ta sada je omezenější než v pythonu3.
my $ℏ = 1.054571800e-34; # Funguje, jak má
say $ℏ;

my $μ̂ = 'zdar'; # Ostuda – nefunguje. Perl sucks, python rulez.
say $μ̂ ;
Nevolte zmrdy.
wamba avatar 11.4.2016 14:34 wamba | skóre: 38 | blog: wamba
Rozbalit Rozbalit vše Re: Naučte mě Perl 6, II. Kontext
tak ono to nebude tak horké :) pokud to bude standardní spojení tak to lze, jinak lze použít term operátor, nebo konstantu
my $ĉ=2;
my &term:<μ̂> = { 'ahoj' };
constant aμ̂ = 'ahoj';
say $ĉ;
say μ̂;
say aμ̂;
This would have been so hard to fix when you don't know that there is in fact an easy fix.
⧠ A = 0 avatar 11.4.2016 17:24 ⧠ A = 0 | skóre: 11 | blog: Technokratovo_zrcadlo | Helsinki
Rozbalit Rozbalit vše Re: Naučte mě Perl 6, II. Kontext
Kdybych potřeboval jen standardní spojení, mohu se vykašlat na nějaké kombinační znaky a vrazit tam rovnou příslušný jeden unikódový znak. Ale když mám ve vzorečku μ se stříškou (tak se často značí jednotkové vektory), chci mít μ̂ i v kódu, a holt to nejde jinak než s kombinačním znakem.
Nevolte zmrdy.
⧠ A = 0 avatar 11.4.2016 17:25 ⧠ A = 0 | skóre: 11 | blog: Technokratovo_zrcadlo | Helsinki
Rozbalit Rozbalit vše Re: Naučte mě Perl 6, II. Kontext
Na druhou stranu uznávám, že je krajně nepravděpodobné, že bych kdy použil perl k numerickým výpočtům. :-)
Nevolte zmrdy.
wamba avatar 11.4.2016 21:47 wamba | skóre: 38 | blog: wamba
Rozbalit Rozbalit vše Re: Naučte mě Perl 6, II. Kontext
Pro numerické výpočty by mohlo být zajímavé, že Perl 6 počítá (automaticky do určité velikosti) s desetinnými čísly jako s racionálními a ne s plovoucí čárkou.
This would have been so hard to fix when you don't know that there is in fact an easy fix.
wamba avatar 11.4.2016 17:41 wamba | skóre: 38 | blog: wamba
Rozbalit Rozbalit vše Re: Naučte mě Perl 6, II. Kontext
uznávám v matematice je to celkem běžné a občas se to hodí, ale teď jsem to zkoušel a funguje to i v Perlu 6 (předtím jsem myslel, že si to testoval); tohle funguje:
my \μ̂ = 12;
say μ̂; 
my $μ̂ = 13;
say $μ̂;
PS. čím ten znak píšeš zkoušel jsem compose i tex mod v emacsu a nepodařilo se :). Šipka nad písmenem se dá vypsat taky?
This would have been so hard to fix when you don't know that there is in fact an easy fix.
⧠ A = 0 avatar 11.4.2016 20:34 ⧠ A = 0 | skóre: 11 | blog: Technokratovo_zrcadlo | Helsinki
Rozbalit Rozbalit vše Re: Naučte mě Perl 6, II. Kontext
Testoval jsem a nešlo mi to. Tvůj příklad mi dává chybu
===SORRY!=== Error while compiling test2.pl6
Term definition requires an initializer
at test2.pl6:1
------> my \μ⏏̂ = 12;
    expecting any of:
        scoped declarator
Ale možná to bude tím, že mám nějakou archaickou versi perlu6 (stabilní debian)
$ perl6 -v
This is perl6 version 2014.07 built on parrot 6.6.0 revision 0
Přiznám se, že vzhledem k častotě používání nemám žádný effektivní způsob psaní – většinou si to kopíruji myší z nějakého svého seznamu (na nějž jsem to dostal pomocí kcharselect).
Nevolte zmrdy.
wamba avatar 11.4.2016 21:35 wamba | skóre: 38 | blog: wamba
Rozbalit Rozbalit vše Re: Naučte mě Perl 6, II. Kontext
V mé verzi
perl6 -v
This is Rakudo version 2016.03-86-g0e95cde built on MoarVM version 2016.03-84-g4afd7b6
implementing Perl 6.c.
to funguje.

Ale moc se v Unicode nevyznám, tak ti neřeknu zda to má jít podle té Sinopse.
This would have been so hard to fix when you don't know that there is in fact an easy fix.
12.4.2016 08:21 Martin Mareš
Rozbalit Rozbalit vše Re: Naučte mě Perl 6, II. Kontext
Verze Rakuda z roku 2014 ještě moc použitelná není, opravdu doporučuji pořídit si co nejnovější. Speciálně Rakudo nad Parrotem pracovalo s Unicodem dost primitivně, až nad MoarVM to začíná fungovat pěkně. (AFAIK – vývoj P6 spíš z dálky sleduji, než bych se aktivně zapojoval. Proč jen má den pouhých 24 hodin? :) )
12.4.2016 00:41 pc2005 | skóre: 38 | blog: GardenOfEdenConfiguration | liberec
Rozbalit Rozbalit vše Re: Naučte mě Perl 6, II. Kontext
Kruci a já se těšil na Zalgo kódy :-D.

Založit nové vláknoNahoru

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.