p6kontext2014

239
Perl 6 in Kontext

Upload: lichtkind

Post on 05-Dec-2014

149 views

Category:

Software


0 download

DESCRIPTION

A tour through Perl 6 Operators

TRANSCRIPT

Page 1: P6kontext2014

Perl 6 in Kontext

Page 2: P6kontext2014

Bisher:

AllgemeinArray / Hash

RegexOOP

Page 3: P6kontext2014

lichtkind.de

AllgemeinArray / Hash

RegexOOP

Page 4: P6kontext2014

Alle großen Themen

ÜbersichtVariablen

ParserAbstraktion

Page 5: P6kontext2014

Alle großen Themen

VariablenParser

AbstraktionAusdrücke

Page 6: P6kontext2014

OOP ==> OOL

Array / HashRegexOOP

Operatoren

Page 7: P6kontext2014

OOP ==> OOL

OperatorOriented

Language

Page 8: P6kontext2014

Perl 6 in Kontext

Page 9: P6kontext2014

1 Wort zu Operatoren

Page 10: P6kontext2014

Operatoren

Piktogramme

Page 11: P6kontext2014
Page 12: P6kontext2014

Operatoren

Piktogrammeschnelle Orientierung

Page 13: P6kontext2014

Operatoren

Piktogrammeschnelle Orientierung

wie Einrückungen

Page 14: P6kontext2014

Operatoren

Piktogrammeschnelle Orientierung

wie Leerzeilen

Page 15: P6kontext2014

Perl 6 in Kontext

Page 16: P6kontext2014

Perl 5 in Kontext

Page 17: P6kontext2014

Perl 5 in Kontext

wantarray

Page 18: P6kontext2014

Kontext: wantarray

true (else) - arrayfalse (0|'') - scalar

undef - void

Page 19: P6kontext2014

Perl 6 in Kontext

kein wantarray !!!

Page 20: P6kontext2014

P6 InnereienKontext

=Datentyp

=Klasse

Page 21: P6kontext2014

Typklassen:NumStr

ArrayHash

...

Page 22: P6kontext2014

Wie Gewohnt

my $l = 12;my $d = 'text';

Page 23: P6kontext2014

Aber Implizit:

my Num $l = 12;my Str $d = 'text';

Page 24: P6kontext2014

Wer Java kennt:

public method to_string {

Page 25: P6kontext2014

In P6 meist implizit

$var.to_string();

Page 26: P6kontext2014

Perl 5 in Kontext

$nr =()= $str =~ /.../g;

Page 27: P6kontext2014

Goatse Secret Op

$nr =()= $str =~ /.../g;

Page 28: P6kontext2014

Fordert List Kontext

$nr =()= $str =~ /.../g;

Page 29: P6kontext2014

Explizit in Perl 6

@() array

Page 30: P6kontext2014

Explizit in Perl 6

$() scalar@() array%() hash

&() code

Page 31: P6kontext2014

Perl 6 in Kontext

$ scalar@ array% hash

Page 32: P6kontext2014

Invariante Sigils

$ scalar@ array% hash

Page 33: P6kontext2014

Invariante Sigils

$scalar @array %hash

Page 34: P6kontext2014

Zeigen kein Kontext

$scalar @array[5]

%hash{'key'}

Page 35: P6kontext2014

Schreiben wir so

$scalar @array[5]

%hash<key>

Page 36: P6kontext2014

Sigils

$ scalar @ positional % assoziativ & aufrufbar

Page 37: P6kontext2014

Kontextoperatoren

$() scalar@() array%() hash

&() code

Page 38: P6kontext2014

Langversion

$() item() @() list()

%() hash() &() code()

Page 39: P6kontext2014

Klammern optional

$() item() @() list()

%() hash() &() code()

Page 40: P6kontext2014

Item Kontext

$() item() @() list()

%() hash() &() code()

Page 41: P6kontext2014

List Kontext

$() item() @() list()

%() hash() &() code()

Page 42: P6kontext2014

P5 List Kontext

$() item() flat()

%() hash() &() code()

Page 43: P6kontext2014

Hash Kontext

$() item() @() list()

%() hash() &() code()

Page 44: P6kontext2014

Code Kontext

$() item() @() list()

%() hash() &() code()

Page 45: P6kontext2014

Mehr Kontext Ops

~ string + numeric ? boolean

Page 46: P6kontext2014

Negierende Ops

~ string + - numeric ? ! boolean

Page 47: P6kontext2014

Beispiel ohne ()

~@list +@list ?@list

Page 48: P6kontext2014

Kontext Ops

~@list @list[0].@list[1]+@list ?@list

Page 49: P6kontext2014

Kontext Ops

~@list @list[0].@list[1]+@list @list.elems ?@list

Page 50: P6kontext2014

Kontext Ops

~@list @list[0].@list[1]+@list @list.elems

?@list @list.elems > 0

Page 51: P6kontext2014

Bool Kontext

?

Page 52: P6kontext2014

Bool Kontext

? !?^ ?| ?& ^ | &

// ^^ || && ff fff?? !!

Page 53: P6kontext2014

Bool Kontext

? !?^ ?| ?& ^ | &

// ^^ || && ff fff?? !!

Page 54: P6kontext2014

Bool Kontext

?

Page 55: P6kontext2014

Bool Kontext

my $var = 45; say ?$var;

Page 56: P6kontext2014

Bool Kontext

my $var = 45; say ?$var;

True

Page 57: P6kontext2014

Bool Kontext

my $var = 45; say ?$var;

True

Bool::True in Stringkontext

Page 58: P6kontext2014

Bool Kontext

my $var = 45; say !$var;

False

Bool::False in Stringkont.

Page 59: P6kontext2014

Ist das so?

my $var = e; say so($var);

True

Bool::True in Stringkontext

Page 60: P6kontext2014

Ist das nicht so?

my $var = e; say not $var;

False

Bool::False in Stringkont.

Page 61: P6kontext2014

Hohe Präzedenz

my $var = 45; say ?$var + 1;

Page 62: P6kontext2014

Hohe Präzedenz

my $var = 45; say ?$var + 1;

2

True in Numkontext = 1

Page 63: P6kontext2014

Niedrige Präzedenz

my $var = 45; say so $var + 1;

Page 64: P6kontext2014

Niedrige Präzedenz

my $var = 45; say so $var + 1;

True

46 im Boolkontext = True

Page 65: P6kontext2014

Bool Kontext

my $var = 45; say 1 if $var + 1;

1

46 im Boolkontext = True

Page 66: P6kontext2014

Bool Kontext

my $var = 45; say 1 if $var + 1;

1

If unless while until

Page 67: P6kontext2014

Das War einfach!

? !?^ ?| ?& ^ | &

// ^^ || && ff fff?? !!

Page 68: P6kontext2014

What the Op?

?^ ?| ?&

Page 69: P6kontext2014

Forciert Bool Kontext

?^ ?| ?&

Page 70: P6kontext2014

Ja, ja logische Ops

?^ ?| ?&

Page 71: P6kontext2014

1+2 = ?

?^ ?| ?&

Page 72: P6kontext2014

Was könnt das sein?

say 0 ?| 'wald';

Page 73: P6kontext2014

Was könnt das sein?

say 0 ?| 'wald';

TrueFalse or True = True

Page 74: P6kontext2014

Was könnt das sein?

say 5 ?^ 0.0;

Page 75: P6kontext2014

Was könnt das sein?

say 5 ?^ 0.0;

TrueTrue xor False = True

Page 76: P6kontext2014

Ein Sinn eröffnet sich

? !?^ ?| ?& ^ | &

// ^^ || && ff fff?? !!

Page 77: P6kontext2014

Hmmmmm ?

^ | &

Page 78: P6kontext2014

Hmmmmm ?

$var = 0 | 'wald';say $var;

Page 79: P6kontext2014

schlauer ?

$var = 0 | 'wald';say $var;

any(0, wald)

Page 80: P6kontext2014

Junctions !

$var = 0 | 'wald';say $var;

any(0, wald)wörtlich: 0 oder 'Wald'

Page 81: P6kontext2014

Junctions !

0 | 1 | 3 | 7 = any(0,1,3,7);

Page 82: P6kontext2014

Junctions !

2 ~~ 0 | 1 | 3 | 7

Page 83: P6kontext2014

Junctions !

2 ~~ 0 | 1 | 3 | 7

False

Page 84: P6kontext2014

Junctions !

1 == 0 | 1 | 3

Page 85: P6kontext2014

Junctions !

1 == 0 | 1 | 3

any(False, True, False)

Page 86: P6kontext2014

Junctions !

if $val == 0 | 1 | 3 { ...

Page 87: P6kontext2014

Junctions !

if $val == 0 | 1 | 3 { ...

True

Page 88: P6kontext2014

Junctions !

if $val == 0 | 1 | 3 { ...

any(False, True, False).to_bool

Page 89: P6kontext2014

Es lichtet sich

? !?^ ?| ?& ^ | &

// ^^ || && ff fff?? !!

Page 90: P6kontext2014

! Forciert Kontext

// ^^ || && ff fff

Page 91: P6kontext2014

Kurzschluß ODER

tu_dies() || tu_das();

Page 92: P6kontext2014

Short Circuit OR

tu_dies() || tu_das();

tu_das() unless tu_dies();

Page 93: P6kontext2014

Defined OR

dies() // das();

Page 94: P6kontext2014

Defined OR

dies() // das();

das() unless defined dies();

Page 95: P6kontext2014

Kurzschluß UND

tu_dies() && tu_das();

tu_das() if tu_dies();

Page 96: P6kontext2014

Kurzschluß XOR

tu_dies() ^^ tu_das();

Page 97: P6kontext2014

Kurzschluß XOR

tu_dies() ^^ tu_das();

my $var = tu_dies();if not $var { $var } else { tu_das() }

Page 98: P6kontext2014

Kein else mit unless

tu_dies() ^^ tu_das();

my $var = tu_dies();if not $var { $var } else { tu_das() }

Page 99: P6kontext2014

Alle Kurzschluß

tu_dies() || tu_das();tu_dies() // tu_das();

tu_dies() && tu_das();tu_dies() ^^ tu_das();

Page 100: P6kontext2014

Grenzwerte

$a min $b$a max $b

$a minmax $b

Page 101: P6kontext2014

Grenzwerte

$a min $b$a max $b

minmax @a

Page 102: P6kontext2014

Flipflop

anfang() ff ende();anfang() fff ende();

Page 103: P6kontext2014

War .. | … in Skalar K.

while … {tu() if anfang() ff ende();

tu() if anfang() fff ende();}

Page 104: P6kontext2014

Fast am Ziel

? !?^ ?| ?& ^ | &

// || &&?? !!

Page 105: P6kontext2014

Ternärer Op

?? !!

Page 106: P6kontext2014

Ternärer Op

war früher ? :

?? !!

Page 107: P6kontext2014

Ternärer Op

war früher ? :wertet in Boolkontext aus

?? !!

Page 108: P6kontext2014

Ternärer Op

war früher ? :wertet in Boolkontext ausreturn Wert unverändert

?? !!

Page 109: P6kontext2014

Soweit Klar?

? !?^ ?| ?& ^ | &

// || &&?? !!

Page 110: P6kontext2014

Numeric Kontext

+ - * / % %% **+^ +| +& +< +>

Page 111: P6kontext2014

Weiß Jeder :)

+ - * / % %% **+^ +| +& +< +>

Page 112: P6kontext2014

Modulo

7 / 3

7/3(2.333) | 2

Page 113: P6kontext2014

Modulo

7 % 3

Page 114: P6kontext2014

Modulo

7 % 3

7 = 3 * 2 + 1

Page 115: P6kontext2014

ModMod?

7 %% 3

Page 116: P6kontext2014

Teilbar

7 %% 3

False => R 1

Page 117: P6kontext2014

Numeric Kontext

+ - * / % %% **+^ +| +& +< +>

Page 118: P6kontext2014

Bitweise Logik

+^ +| +&

Page 119: P6kontext2014

Bitweiser Shift

+< +>

Page 120: P6kontext2014

Numeric Kontext

+ - * / % %% **+^ +| +& +< +>

Page 121: P6kontext2014

Was Vergessen ?

Page 122: P6kontext2014

Was Vergessen ?

++--

Page 123: P6kontext2014

Geordnete Mengen

++ after - - before cmp

Page 124: P6kontext2014

Geordnete Mengen

cmp:Less, Same, More

Page 125: P6kontext2014

Geordnete Mengen

cmp:Less, Same, More

-1, 0, 1

Page 126: P6kontext2014

Reihenfolge in Kontext

<=>legcmp

Page 127: P6kontext2014

Reihenfolge in Kontext

<=> Num Kontextleg Str Kontextcmp allgemein

Page 128: P6kontext2014

Reihenfolge in Kontext

< Num Kontext lt Str Kontext before allgemein

Page 129: P6kontext2014

Reihenfolge in Kontext

> Num Kontext gt Str Kontextafter allgemein

Page 130: P6kontext2014

Geordnete Mengen

++ 1 after - - 1 before

Page 131: P6kontext2014

Gleichheit in Kontext

== Num Kontext eq Str Kontext=== allgemein

Page 132: P6kontext2014

Gleichheit in Kontext

== Num Kontext eq Str Kontexteqv allgemein

Page 133: P6kontext2014

Gleichheit in Kontext

=== statische Analyseeqv dynamisch =:= gebunden

Page 134: P6kontext2014

Reihenfolge in Kontext

if 2 eqv 2.0 {

Page 135: P6kontext2014

Typ-, dann Inhaltcheck

if 2 eqv 2.0 {Int() vs. Rat()

Page 136: P6kontext2014

Typ-, dann Inhaltcheck

if 2 == 2.0 {

Page 137: P6kontext2014

Typ-, dann Inhaltcheck

if 2 == 2.0 {True (Num Kontext)

Page 138: P6kontext2014

Numeric Kontext

+ - * / % %% **+^ +| +& +< +>

Page 139: P6kontext2014

String Kontext

~~^ ~| ~&

~~ x

Page 140: P6kontext2014

Perlige to_string

~

Page 141: P6kontext2014

War mal der .

~

say 'kombiniere' ~ 'Watson';

Page 142: P6kontext2014

String Kontext

~~^ ~| ~&

~~ x

Page 143: P6kontext2014

Zeichenweise Logik

~^ ~| ~&

Page 144: P6kontext2014

Zeichenweise Logik

1 +| 2 = 3

'a' ~| 'b' = 'c'

Page 145: P6kontext2014

String Kontext

~~^ ~| ~&

~~ x

Page 146: P6kontext2014

String Kontext

~~^ ~| ~&

~~ x

Page 147: P6kontext2014

String Kontext

say '-' x 80;

Page 148: P6kontext2014

String Kontext

~~^ ~| ~&

~~ x

Page 149: P6kontext2014

List Kontext

, … xx X Z<<== <== ==> ==>>

Page 150: P6kontext2014

Komma Operator

@fib = 1, 1, 2, 3, 5;

Page 151: P6kontext2014

Komma Operator

$fib = (1, 1, 2, 3, 5);

Page 152: P6kontext2014

Komma Operator

$fib = (1);say $fib.WHAT;

Int

Page 153: P6kontext2014

Komma Operator

$fib = (1 ,);say $fib.WHAT;

Page 154: P6kontext2014

Komma Operator

$fib = (1 ,);say $fib.WHAT;

Parcel

Page 155: P6kontext2014

Komma Operator

$fib = (1 ,);say $fib.WHAT;Parameter Liste

Page 156: P6kontext2014

Capture Kontext

| benannte Parameter|| positionale Parameter

Page 157: P6kontext2014

List Kontext

, … xx X Z<<== <== ==> ==>>

Page 158: P6kontext2014

Sequence Operator

$d = 1, 2 … 9;

Page 159: P6kontext2014

Yadda Operator

sub befriede { … }

Page 160: P6kontext2014

Yadda Operator

sub befriede { … }sub befriede { ??? }sub befriede { !!! }

Page 161: P6kontext2014

Sequence Operator

$d = 0, 1 … 9;

Page 162: P6kontext2014

kann Range Op nicht!

$d = 9, 8 … 0;

Page 163: P6kontext2014

kann Range Op nicht!

$d = 9 .. 0;

Page 164: P6kontext2014

Sequence Operator

$zp = 1, 2, 4… 256;

Page 165: P6kontext2014

Sequence Operator

$fib = 1, 1, *+* … *;

Page 166: P6kontext2014

Was vergessen?

$d = 0 .. 9;

Page 167: P6kontext2014

Was vergessen?

say 0 .. 9;

Page 168: P6kontext2014

Keine Liste?

say 0 .. 9;

0..9

Page 169: P6kontext2014

Bestimmt Kontext

say (0 .. 9);

Page 170: P6kontext2014

Keine Liste ?

say (0 .. 9);

0..9

Page 171: P6kontext2014

Was ist es denn?

say (0 .. 9).WHAT;

Page 172: P6kontext2014

Range ???

say (0 .. 9).WHAT;

Range

Page 173: P6kontext2014

Range ???

say 5 ~~ 0 .. 9;

True

Page 174: P6kontext2014

So geht Liste

say @(0..9).WHAT;

List

Page 175: P6kontext2014

List - Ausgabe?

say @(0 .. 9);

0 1 2 3 4 5 6 7 8 9

Page 176: P6kontext2014

for macht Listkontext

say $_ for 0 .. 9;

0 1 2 3 4 5 6 7 8 9

Page 177: P6kontext2014

for macht Listkontext

say for 0 .. 9;

Page 178: P6kontext2014

for macht Listkontext

.say for 0 .. 9;

0 1 2 3 4 5 6 7 8 9

Page 179: P6kontext2014

List Kontext

, … xx X Z<<== <== ==> ==>>

Page 180: P6kontext2014

Spielen mit Listen

xx X Z

Page 181: P6kontext2014

xx Operator

Page 182: P6kontext2014

xx Operator

say 'eins zwo eins zwo';

Page 183: P6kontext2014

xx Operator

say 'eins zwo eins zwo';say q:words(eins zwo) xx 2;

Page 184: P6kontext2014

xx Operator

say 'eins zwo eins zwo';say q:words(eins zwo) xx 2;say q:w(eins zwo) xx 2;

Page 185: P6kontext2014

xx Operator

say 'eins zwo eins zwo';say q:words(eins zwo) xx 2;say q:w(eins zwo) xx 2;say qw(eins zwo) xx 2;

Page 186: P6kontext2014

xx Operator

say 'eins zwo eins zwo';say q:words(eins zwo) xx 2;say q:w(eins zwo) xx 2;say qw(eins zwo) xx 2;say <eins zwo> xx 2;

Page 187: P6kontext2014

X Operator

say <eins zwo> X<dan rabauke>;

Page 188: P6kontext2014

Kartesisches Produkt

say <eins zwo> X<dan rabauke>;

eins dan eins rabaukezwo dan zwo rabauke

Page 189: P6kontext2014

Z Operator

say <eins zwo> Z<dan rabauke>;

Page 190: P6kontext2014

Reißverschluss

say <eins zwo> Z<dan rabauke>;

eins dan zwo rabauke

Page 191: P6kontext2014

Reißverschluss

say <eins zwo> zip<dan rabauke>;

eins dan zwo rabauke

Page 192: P6kontext2014

Reißverschluss

for @li Z @re -> $l, $r {

Page 193: P6kontext2014

List Kontext

, xx X Z<<== <== ==> ==>>

Page 194: P6kontext2014

Schwartz Transform

my @output = map { $_->[0] } sort { $a->[1] cmp $b->[1] } map { [$_,expensive_func($_)] } @input;

Page 195: P6kontext2014

Pipe Operator

my @output <== map { $_[0] } <== sort { $^a[1] cmp $^b[1] } <== map { [$_,expensive_func($_)] } <== @input;

Page 196: P6kontext2014

Andere Richtung

@input ==> map { [$_,expensive_func($_)] } ==> sort { $^a[1] cmp $^b[1] } ==> map { $_[0] } ==> my @output;

Page 197: P6kontext2014

Append Mode

my @output <<== map { $_[0] } <<== sort { $^a[1] cmp $^b[1] } <<== map { [$_,expensive_func($_)] } <<== @input;

Page 198: P6kontext2014

Pointy Sub

for @input -> $i { ...

Page 199: P6kontext2014

List Kontext

, xx X Z<<== <== ==> ==>>

Page 200: P6kontext2014

MetaOps

= !X Z R S

[] [\]<< >>

Page 201: P6kontext2014

Meta Op =

@summe += 3;

Page 202: P6kontext2014

Meta Op !

if $alter !< 18 {

Page 203: P6kontext2014

Meta Op !

if $alter !< 18 {

# echter P6 code

Page 204: P6kontext2014

Meta Op R

$alter = 2 R- 18;

# == 16

Page 205: P6kontext2014

Meta Op S

$alter = 2 S- 18;

# == -16

Page 206: P6kontext2014

Meta Op S

$alter = 2 S- 18;

# kein sichtbarer Effekt

Page 207: P6kontext2014

Meta Op S

$alter = 2 S- 18;

# ! Parallelisierung

Page 208: P6kontext2014

Meta Op S

$alter = 2 S- 18;

# ! später wichtiger

Page 209: P6kontext2014

MetaOps

= !X Z R S

[] [\]<< >>

Page 210: P6kontext2014

Meta Op X

Page 211: P6kontext2014

Wir erinnern

say <1 2> X <a b>

1 a 1 b 2 a 2 b

Page 212: P6kontext2014

Wir erinnern

<1 2> X <a b>

<1 a 1 b 2 a 2 b>

Page 213: P6kontext2014

Kartesisches Produkt

<1 2> X <a b>

'1','a','1','b','2','a','2','b'

Page 214: P6kontext2014

Kartesischen Paare

<1 2> X~ <a b>

'1a','1b','2a','2b'

Page 215: P6kontext2014

Kartesisches Produkt

<1 2> X+ <a b>

Stacktrace

Page 216: P6kontext2014

Kartesischen Paare

<1 2> X* <3 4>

3, 4, 6, 8

Page 217: P6kontext2014

Meta Op Z

# manche ahnen was kommt

Page 218: P6kontext2014

Metaop Z

<1 2> Z* <3 4>

3, 8

Page 219: P6kontext2014

Metaop Z

(<1 2>;<3 4>).zipwith(&[*])

3, 8

Page 220: P6kontext2014

Metaop Z

(<1 2>;<3 4>).zipwith(&[*])

<1 2> Z* <3 4>

Page 221: P6kontext2014

Metaop Z

(<1 2>;<3 4>).zip()

<1 2> Z <3 4>

Page 222: P6kontext2014

Metaop Z

(<1 2>;<3 4>).cross()

<1 2> X <3 4>

Page 223: P6kontext2014

Metaop Z

(<1 2>;<3 4>).crosswith(&[*])

<1 2> X* <3 4>

Page 224: P6kontext2014

MetaOps

= !X Z R S

[] [\]<< >>

Page 225: P6kontext2014

Meta Op []

Page 226: P6kontext2014

Mach mir den Gauss

(1..100).reduce(&[+])

Page 227: P6kontext2014

Forciert List Kontext

(1..100).reduce(&[+])

[+] 1 .. 100

Page 228: P6kontext2014

Forciert List Kontext

True

[<] 1 .. 100

Page 229: P6kontext2014

Whats datn?

(1..100).triangle(&[+])

[\+] 1 .. 100

Page 230: P6kontext2014

Whats datn?

1, 3, 6

[\+] 1 .. 3

Page 231: P6kontext2014

Whats datn?

1=1, 1+2=3, 1+2+3=6

[\+] 1 .. 3

Page 232: P6kontext2014

Meta Op <<

Page 233: P6kontext2014

Geburtstagsfeier !!!

@alter >>+=>> 1;

Page 234: P6kontext2014

Alle werden älter

@alter == 18, 22, 35;

@alter = @alter >>+>> 1;

@alter == 19, 23, 36;

Page 235: P6kontext2014

Nur einer wird älter

@alter == 18, 22, 35;

@alter = @alter <<+<< 1;

@alter == 19;

Page 236: P6kontext2014

Interessante Fälle

<18, 22, 35> >>+<< <1, 2>

<18, 22, 35> <<+>> <1, 2>

Page 237: P6kontext2014

Interessante Fälle

<18, 22, 35> >>+<< <1, 2>ERROR

<18, 22, 35> <<+>> <1, 2>19, 24, 36

Page 238: P6kontext2014

Komplexität ++

~~heute nicht

Page 239: P6kontext2014

Danke

vv