perl 6 datenstrukturen

Download Perl 6 Datenstrukturen

If you can't read please download the document

Upload: lichtkind

Post on 16-Apr-2017

443 views

Category:

Technology


0 download

TRANSCRIPT

Perl 6 Data Structures

Herbert Breunung

CPAN: lichtkind

Kephra 0.4.3.32

Kephra Logo

Als Hieroglyphe

Mansfelder Land

Mansfelder Land

Egypt aka Khem

Ein (K|C)amel

Noch ein Kamel?

Camelia

Camelia

Schlaraffenland

Heiliger Gral

Schnheit Und Struktur

Datenstrukturen

@rrays Und %ashes

Auch $calare

Perl 5

@cities = ('roma', 'milano', 'torino');

Perl 5 & 6

@cities = ('roma', 'milano', 'torino');

Perl 5

@cities = qw(roma milano torino);

Perl 6

@cities = qw(roma milano torino);

@cities = ;

Mit Interpolation Wie

@cities = qw(roma milano torino);

@cities = ;@cities = ;

Perl 5 & 6

@cities = ('roma', 'milano', 'torino');

P5 & P6

@cities = ('roma', 'milano', 'torino');

@cities = 'roma', 'milano', 'torino';

Klammern Gruppieren !

@cities = ('roma', 'milano', 'torino');

@cities = 'roma', 'milano', 'torino';

Itemkontext

$cities = ('roma', 'milano', 'torino');

$cities = 'roma', 'milano', 'torino';

Itemkontext

# Parcel()$cities = ('roma', 'milano', 'torino');# Str()$cities = 'roma', 'milano', 'torino';

Was Ist Str ?

# Parcel()$cities = ('roma', 'milano', 'torino');# Str() - 'roma' ist ein String$cities = 'roma', 'milano', 'torino';

Nur Der Erste Wert

# Parcel()$cities = ('roma', 'milano', 'turino');# $a, $b, $c = 1, 2, 3;$cities = 'roma', 'milano', 'torino';

Was Ist Ein Parcel ?

# Parcel Sequenz von Items$cities = ('roma', 'milano', 'torino');# Str()$cities = 'roma', 'milano', 'torino';

() Erinnert An Was?

# Parcel wie in function(1,2,3);$cities = ('roma', 'milano', 'torino');# Str()$cities = 'roma', 'milano', 'torino';

Parcel

# hat pos. und benannte Args$cities = ('roma', 'milano', 'torino');# Str()$cities = 'roma', 'milano', 'torino';

Kontainertypen

# Array()$cities = ['roma', 'milano', 'torino'];# Parcel()$cities = ('roma', 'milano', 'torino');

Array() ne List() ne Parcel()

# List()$cities = @('roma', 'milano', 'torino');# Parcel()$cities = ('roma', 'milano', 'torino');

Nur Eine Liste

# List()$cities = list('roma', 'milano', 'torino');# Parcel()$cities = ('roma', 'milano', 'torino');

Pos. Param. Als Liste

# List()$cities = list('roma', 'milano', 'torino');# List()$cities = ||('roma', 'milano','torino');

Array Objekt

$cities = ['roma', 'milano', 'torino'];@cities = 'roma', 'milano', 'torino';

say $cities.WHAT # Array()say @cities.WHAT # Array()

Nummer An Elementen

say length @cities; # 3

say elems @cities; # 3 # kein length

elems Ist Methode

say length @cities; # 3

say @cities.elems; # 3

An Jedem Arrayobjekt

say scalar @$cities; # 3

say $cities.elems; # 3

Inhalt Vom Skalar

say @$cities; # roma ...

say $cities; # roma ...

Auch Im Skalarkontext

say @cities; # roma ...

say $(@cities); # roma ...

Ich Meinte Itemkontext

say @cities; # roma ...

say item(@cities); # roma ...

Numerischer Kontext

say scalar @cities; # 3

say + @cities; # 3

Numerischer Kontext

say scalar @$cities; # 3

say + $cities; # 3

Boolkontext

say values @cities; # romami...

say ? @cities; # Bool::True

Stringkontext

say @cities; # roma milano

say ~ @cities; # roma milano ...

. Wurde ~

say @cities; # roma milano

say ... ~ @cities; # ...roma mila..

Gehts Auch in P6 ?

say @cities;# roma milano torino

say @cities;# roma milano torino?

Nicht Ganz

say @cities; # roma milano ...

say @cities; # @cities

Fge [] An

say @cities; # roma milano

say @cities[];# roma milano ...

Das War Kein Spezialfall

say @cities; # roma milano

say @cities[]; # roma milano ...

Perl 5 & 6

say @cities; # romamilanotorino

say @cities; # roma milano torino

Tiefer Als Listen

STD Perl 5

use Data::Dumper;say Dumper(@cities);

$VAR1 = 2; $VAR2 = 3;$VAR3 = 4;$VAR4 = 5;$VAR5 = 6;$VAR6 = 7;$VAR7 = 7;$VAR8 = 2;$VAR9 = 5;$VAR10 = [ 'a', 'b', 'c' ]; [2, 3, 4, 5, 6, 7, 7, 2, 5, ["a", "b", "c"]]

Data::Dumper Ausgabe

Er Hats Repariert

use YAML; # Data::Dumper suckssay Dump @cities;

---- 2- 3- 4- 5- 6- 7- 7- 2- 5- - a - b - c [2, 3, 4, 5, 6, 7, 7, 2, 5, ["a", "b", "c"]]

YAML Ausgabe

---- 2- 3- 4- 5- 6- 7- 7- 2- 5- - a - b - c [2, 3, 4, 5, 6, 7, 7, 2, 5, ["a", "b", "c"]]

Er Kanns Krzer

Perl 6

say @cities.perl;

Mit eval Rckwandelbar

# in jeder Tiefe:

say @cities.perl;

$ ["roma", "milano", "torino"]

Perl 5

say $cities[2]; # torino

Perl 6

say $cities[2]; # torino

say @cities[2]; # torino

Array Als Item

say $cities[2]; # in Perl 6 auch

say @cities[2]; # torino

Der Selbe Kontainertyp

$cities = ['roma', 'milano', 'torino'];say $cities[2]; # $cities.WHAT

say @cities[2]; # @cities.WHAT

Arrayobjekt

say $cities[2]; # Array()

say @cities[2]; # Array()

Say Ist Eine Methode

say $cities[2]; # torino

@cities[2].say; # dito

[ ] Auch (Wie Jeder Op)

say $cities.[2]; # 2 ist parameter

@cities.[2].say; # dito

2 ist Letzter Index

say $cities[2]; # torino

say @cities[2]; # dito

Perl 5

say $cities[-1]; # torino

say @cities[2]; # dito

Perl 6

say $cities[-1]; # torino

say @cities[*-1]; # dito

Whatever *

say @cities[*-1]; # torino

Whatever *

say @cities[*-1]; # torino# parameter *-1 ist eine closure

Whatever *

say @cities[*-1]; # torino# parameter *-1 ist eine closure# * ist parameter an diese closure

Whatever *

say @cities[*-1]; # turino# parameter *-1 ist eine closure# * ist parameter an diese closure# * enthlt gesammten Array

Whatever *

say @cities[*-1]; # torino

say @cities[* / 2];# milano

Whatever *

say @cities; # roma milano torino

say @cities[*]; # roma milano torino

Whatever *

say @cities; # roma milano torino

say @cities[]; # roma milano torino # default param ist *

LoL

say @cities[1][1];

List Of List

@cities = [], [];

say @cities[1][1];

say $cities[1;1];

Ein Spiel

Zhl die Schlmpfe

Zhle

Wie viele Elemente hat diese Liste?

Count

Runde 1

Wie Viele Elemente ?

my @number = 1, 2, 3, 4;

Wie Viele Elemente ?

my @number = 1, 2, 3, 4; # 4my @number = (1, 2, 3, 4);

Wie Viele Elemente ?

my @number = 1, 2, 3, 4; # 4my @number = (1, 2, 3, 4); # 4my @number = 1, (2, 3), 4;

Wie Viele Elemente ?

my @number = 1, 2, 3, 4; # 4my @number = (1, 2, 3, 4); # 4my @number = 1, (2, 3), 4; # 4my @number = 1, [2, 3], 4;

Wie Viele Elemente ?

my @number = 1, 2, 3, 4; # 4my @number = (1, 2, 3, 4); # 4my @number = 1, (2, 3), 4; # 4my @number = 1, [2, 3], 4; # 3my @number = [1, 2, 3, 4];

Wie Viele Elemente ?

my @number = 1, 2, 3, 4; # 4my @number = (1, 2, 3, 4); # 4my @number = 1, (2, 3), 4; # 4my @number = 1, [2, 3], 4; # 3my @number = [1, 2, 3, 4]; # 1mysub 1,(2,[3, 4]), 5; # in @_

Wie Viele Elemente ?

my @number = 1, 2, 3, 4; # 4my @number = (1, 2, 3, 4); # 4my @number = 1, (2, 3), 4; # 4my @number = 1, [2, 3], 4; # 3my @number = [1, 2, 3, 4]; # 1mysub 1,(2,[3, 4]), 5; # 4# + Params. von auerhalb der ( )

Runde 2

Wie Viele Elemente ?

my $number = 1, 2, 3, 4;

Wie Viele Elemente ?

my $number = 1, 2, 3, 4; # 1my $number = (1, 2, 3, 4);

Wie Viele Elemente ?

my $number = 1, 2, 3, 4; # 1my $number = (1, 2, 3, 4); # 4my $number = 1, (2, 3), 4;

Wie Viele Elemente ?

my $number = 1, 2, 3, 4; # 1my $number = (1, 2, 3, 4); # 4my $number = 1, (2, 3), 4; # 1my $number = (1, 2), 3, 4;

Wie Viele Elemente ?

my $number = 1, 2, 3, 4; # 1my $number = (1, 2, 3, 4); # 4my $number = 1, (2, 3), 4; # 1my $number = (1, 2), 3, 4; # 2my $number = (1, [2, 3], 4);

Wie Viele Elemente ?

my $number = 1, 2, 3, 4; # 1my $number = (1, 2, 3, 4); # 4my $number = 1, (2, 3), 4; # 1my $number = (1, 2), 3, 4; # 2my $number = (1, [2, 3], 4); # 3my $number = [1, 2, 3, 4];

Wie Viele Elemente ?

my $number = 1, 2, 3, 4; # 1my $number = (1, 2, 3, 4); # 4my $number = 1, (2, 3), 4; # 1my $number = (1, 2), 3, 4; # 2my $number = (1, [2, 3], 4); # 3my $number = [1, 2, 3, 4]; # 4

Runde 3

Wie Viele Elemente ?

my $pd = my @pd = (3, 1, 4, 1);

Wie Viele Elemente ?

my $pd = my @pd = (3, 1, 4, 1);

@number = 1, @pd, 4;

Wie Viele Elemente ?

my $pd = my @pd = (3, 1, 4, 1);

@number = 1, @pd, 4; # 6@number = 1, $pd, 4;

Wie Viele Elemente ?

my $pd = my @pd = (3, 1, 4, 1);

@number = 1, @pd, 4; # 6@number = 1, $pd, 4; # 3@number = 1, @pd.item, 4;

item & list == Konextops

my $pd = my @pd = (3, 1, 4, 1);

@number = 1, @pd, 4; # 6@number = 1, $pd, 4; # 3@number = 1, @pd.item, 4; # 3@number = 1, $pd.list, 4;

Wie Viele Elemente ?

my $pd = my @pd = (3, 1, 4, 1);

@number = 1, @pd, 4; # 6@number = 1, $pd, 4; # 3@number = 1, @pd.item, 4; # 3@number = 1, $pd.list, 4; # 6@number = Nil, Nil, Nil;

Nil != undef

my $pd = my @pd = (3, 1, 4, 1);

@number = 1, @pd, 4; # 6@number = 1, $pd, 4; # 3@number = 1, @pd.item, 4; # 3@number = 1, $pd.list, 4; # 6@number = Nil, Nil, Nil; # 0

And The Winner Is ...

multiply a list

Perl 5

@digits = ( 4 ) x 5; # (4,4,4,4,4)

multiply a list

Perl 6

@digits = ( 4 ) x 5; # (4,4,4,4,4)

@digits = ( 4 ) xx 5; # 4,4,4,4,4

Verfielfacht Listen

@digits = ( 4 ) x 5; # (4,4,4,4,4)

@digits = 4 xx 5; # 4,4,4,4,4

Verfielfacht Strings

@digits = 4 x 5; # '44444'

@digits = 4 x 5; # '44444'

Verfielfacht Strings

@digits = 4 x 5; # '44444'

@digits = (4) x 5; # '44444'

Verfielfacht Strings

@digits = '1 2' x 3; # '1 21 21 2'

@digits = (1,2) x 3; # '1 21 21 2'

Verfielfacht Listen

@digits = (1,2) x 3; # 1,2,1,2,1,2

@digits = (1,2) xx 3; # 1,2,1,2,1,2

Perl 5

@digits = ( 0 .. 9 ); # Bereichsop

Perl 5 & 6

@digits = ( 0 .. 9 );

Perl 6

@digits = 0 .. 9;

Perl 6

@digits = ^ 10; # 0 .. 9

0 Ist Gegeben

@digits = 0 ..^ 10; # 0 .. 9 (@)

^ Schliet Schranke Aus

@digits = -1 ^..^ 10; # 0 .. 9

Sequence - Operator

@digits = 0 ... 9;

Linear

@digits = 0 ... 9; # 0 .. 9

Arithmetisch

@digits = 0 ... 9; # 0 .. 9@odd = 1,3 9; # 1,3,5,7,9

Geometrisch

@digits = 0 ... 9; # 0 .. 9@odd = 1,3 9; # 1,3,5,7,9@bin = 1,2,4 1024;#..,8,16,32,.

Fibonacci

@digits = 0 ... 9; # 0 .. 9@odd = 1,3 9; # 1,3,5,7,9@bin = 1,2,4 1024;#..,8,16,32,.@fib = 0,1,*+* 144; #..,1,2,3,..

Prf Das Limit

@odd = 1,3 10; # 1,3,.. *

Unendliche Liste

@odd = 1,3 10; # 1,3,.. *@number = 0 .. *; # 0 .. Inf

Bestimmte Elemente

@odd = 1,3 10; # 1,3,.. *@number = 0 .. *; # 0 .. Inf

say @odd[1]; # 3say @number[5]; # 4

Alle Elemente

@odd = 1,3 10; # 1,3,.. *@number = 0 .. *; # 0 .. Inf

say @odd[*]; # warten ...say @number; # viele Ziffern

Anzahl Der Elemente

@odd = 1,3 10; # 1,3,.. *@number = 0 .. *; # 0 .. Inf

say + @odd; # warten ...say @number; # viele Ziffern

Was ist geschehen?

$number = 0 .. *; # 0 .. Inf

say $number.WHAT; # Range()

Ausgabe ?

$number = 0 .. *; # 0 .. Inf

say $number; # ?

Erstes Element

$number = 0 .. *; # 0 .. Inf

say $number; # 0

Unendliche Liste

$number = 0 .. *; # 0 .. Inf

say @($number); # digits ...

Array

@number = 0 .. *; # 0 .. Inf

say @number[5];

Bei Bedarf Erzeugt

@number = 0 .. *; # 0 .. Inf

say @number[5]; # @number.reify(5)

Interne Reprsentation

@number = 0 .. *; # 0 .. Inf

say @number.reify(5).perl;# (0, 1, 2, 3, 4, 5, 6..*)

Ihr Kennt Diese

shift unshift

push pop

splice reverse

map grep

Perl 5

%opera = ( 'verdi' => 'Aida', 'puccini' => 'Turandot', 'rossini'=> 'Il barbiere',);

Perl 6

%opera = ( 'verdi' => 'Aida', 'puccini' => 'Turandot', 'rossini'=> 'Il barbiere',);

Kein Gruppieren Ntig

%opera = 'verdi' => 'Aida', 'puccini' => 'Turandot', 'rossini'=> 'Il barbiere', ;

Immer Noch Ein Hash

%opera = 'verdi' => 'Aida', 'puccini' => 'Turandot', 'rossini'=> 'Il barbiere', ;

%opera.WHAT eq 'Hash()'

Neuer Paar-Syntax

%opera = :verdi('Aida'), :puccini('Turandot'), :rossini('Il barbiere'), ;

%opera.WHAT eq 'Hash()'

Mit Autoquoting

%opera = :verdi, :puccini, :rossini, ;

%opera.WHAT eq 'Hash()'

Item - Kontext

$opera = :verdi, :puccini, :rossini, ;

$opera.WHAT eq 'Pair()'

Gruppiert

$opera = ( :verdi, :puccini, :rossini, );

%opera.WHAT eq 'Parcel()'

Packet Kennt Pos.

$opera = ( :verdi, :puccini, :rossini, );0 verdiAida 1 puccini Turandot 2 rossini Il barbiere

Hashkontext - Op

$opera = %( :verdi, :puccini, :rossini, );

%opera.WHAT eq 'Hash()'

Hashkontext - Op

$opera = hash( :verdi, :puccini, :rossini, );

%opera.WHAT eq 'Hash()'

Hash-Generator-Op

$opera = { :verdi, :puccini, :rossini, };

%opera.WHAT eq 'Hash()'

Hash - Generator - Op

%opera = { :verdi, :puccini, :rossini, };

%opera.WHAT eq 'Hash()'

Invariante Sigils

%opera{'rossini'}; # Il barbiere

Invariante Sigils

%opera.{'rossini'}; # alias .at_key()

Erinnern An qw() ?

%opera{'rossini'}; # Il barbiere

%opera;

Mit Interpolation

%opera{'rossini'}; # Il barbiere

%opera;

%opera;

2 Opern Auf Einmal

%opera{'rossini', 'puccini'};

%opera;

%opera;

Sind Auch Hashes

$opera{'rossini', 'puccini'};

$opera;

$opera;

Auch Mit Parcel()

# oder Capture()$opera{'rossini', 'puccini'};

$opera;

$opera;

Hash Methoden

%opera.keys; # verdi puccini ro...

%opera.values; # aida turandot ...

%opera.kv; # verdi aida puccini ...

Haben Arrays Auch

@cities.keys; # 0 1 2

@cities.values; # roma milano ...

@cities.kv; # 0 roma 1 milano 2 ...

Auch Paare

$opera.key; # rossini

$opera.value; # Il barbiere

$opera; #

Mehr Hash Methoden

%opera.pairs; # list of pair obj.

%opera.exists; # Bool

%opera.delete; # 1 | 0

Mehr Hash Methoden

%opera.pairs; # list of pair obj.

%opera.exists; # one at a time

%opera.delete; # one at a time

Hash Im Kontext

? %opera; # bool Kontext

+ %opera; # num Kontext

~ %opera; # string Kontext

Hash Im Kontext

? %opera; # Bool::True

+ %opera; # 3

~ %opera; # rossini Il barbiere

Value Im Kontext

? %opera; # Bool::True

+ %opera; # 3

~ %opera; # rossini Il barbiere

Neue Hashmethoden

say %opera.invert;

Aida verdi Turandot puccini Il barbiere rossini

Hash Erzeuger

my %h = @cities.classify ( { uc substr( $_, 0, 1 ) });

say %h;

$ R roma M milano T torino

Hash Erzeuger

@cities.categorize({ catsub($_ ) });say %h.perl;

Hash Erzeuger

@cities.categorize({ water($_ ) });say %h.perl;

{"mare" => ["roma"], "fiume" => ["roma", "milano", "torino"], "lago" => Nil}

==>

Pipes

Schwartz. Transform

@results = map {}, sort {}, map {...}, @input;

Schwartz. Transform

@results = map {}, sort {}, map {...}, @input;

@results = map {} >[ ][\ ]XZS

Hyperoperator

>>

Hyperoperator

>>.hyper()

Simple Example

(1..5) >>++

That Works

@number>>++

Result

@number>>++

2, 3, 4, 5, 6

More Complicated

(1..5) >>+>> 1

Check Your Spaces

(1..5)_>>+>>_1

Same Result

(1..5) >>+>> 1

2, 3, 4, 5, 6

Reverse Hyper

(1..5) 1

Preserves LoL !

(1..5, [6..9]) >>+>> 1

2, 3, 4, 5, 6, [7, 8, 9,10]

On 2 Sides ?

(1..5, [6..9]) >>+>+>+>+ 1

False

Metaops

>>[ ][\ ]XZS

Triangle

[\ ]

triangle()

Back To Gauss

[\+] (1..100)

Returns A List

[\+] (1..100)

(((((1) + 2 ) + 3) + 4) + 5) + 6) + ...

Returns A List

[\+] (1..100)

(1, 3, 6, 10, 15, 21, 28, ...

Metaops

>>[ ][\ ]XZS

Cross

.crosswith X

Cross

(1, 2) X (1, 2)

11, 12, 21, 22

Cross With Power

(1, 2) X** (1, 2)

Cross With Power

(1, 2) X** (1, 2)

1, 1, 2, 4

Metaops

>>[ ][\ ]XZS

Zip

.zipwith()

Z

Zip

(1..10) Z

Zip

for @a Z @b $a, $b {

Zip

(1..4) Z+ (1..4)

Zip

(1..4) Z+ (1..4)

2, 4, 6, 8

Metaops

>>[ ][\ ]XZS

Sequence

.sequence

S

__END__ ?

=begin END

Danke

Muokkaa otsikon tekstimuotoa napsauttamalla

Muokkaa jsennyksen tekstimuotoa napsauttamallaToinen jsennystasoKolmas jsennystasoNeljs jsennystasoViides jsennystasoKuudes jsennystasoSeitsems jsennystasoKahdeksas jsennystasoYhdekss jsennystaso