Download - Perl 6 Datastructures
- 1. Perl 6 Data Structures
2. Herbert Breunung 3. CPAN: lichtkind 4. Kephra 0.4.3.32 5. Kephra Logo 6. As Hieroglyph 7. Mansfelder Land 8. Mansfelder Land 9. Egypt aka Khem 10. Got A Camel 11. Became Velociraptor 12. Camelia 13. Camel ia 14. 15. Cockaigne 16. Holy Grail 17. Beauty And Order 18. Data Structures 19. 20. @rrays And %ashes 21. $calars Too 22. Every Day Perl 5
- @cities = ( 'roma' , 'milano' , 'turino' );
23. Perl 5 & 6
- @cities = ( 'roma' , 'milano' , 'turino' );
24. Perl 5
- @cities = qw( roma milano turino );
25. Perl 6
- @cities = qw( roma milano turino ); @cities = < roma milano turino >;
26. With Interpolation Like
- @cities = qw( roma milano turino ); @cities = < roma milano turino >; @cities = >;
27. Perl 5 & 6
- @cities = ( 'roma' , 'milano' , 'turino' );
28. Still P5 & P6
- @cities = ( 'roma' , 'milano' , 'turino' ); @cities ='roma' , 'milano' , 'turino' ;
29. Braces Now Just Group
- @cities = ( 'roma' , 'milano' , 'turino' ); @cities ='roma' , 'milano' , 'turino' ;
30. Item Context
- $cities = ( 'roma' , 'milano' , 'turino' ); $cities ='roma' , 'milano' , 'turino' ;
31. Item Context
- # Parcel() $cities = ( 'roma' , 'milano' , 'turino' ); # Str() $cities ='roma' , 'milano' , 'turino' ;
32. What Is Str ?
- # Parcel() $cities = ( 'roma' , 'milano' , 'turino' ); # Str() - 'roma' is a string $cities ='roma' , 'milano' , 'turino' ;
33. Just the first value?
- # Parcel() $cities = ( 'roma' , 'milano' , 'turino' ); # $a, $b, $c = 1, 2, 3; $cities ='roma' , 'milano' , 'turino' ;
34. What is a Parcel ?
- # Parcel type of a signiture $cities = ( 'roma' , 'milano' , 'turino' ); # Str() $cities ='roma' , 'milano' , 'turino' ;
35. () reminds you on what?
- # Parcel like in function(1,2,3); $cities = ( 'roma' , 'milano' , 'turino' ); # Str() $cities ='roma' , 'milano' , 'turino' ;
36. Parcel
- # have positional and named args $cities = ( 'roma' , 'milano' , 'turino' ); # Str() $cities ='roma' , 'milano' , 'turino' ;
37. Container Types
- # Array() $cities = [ 'roma' , 'milano' , 'turino' ]; # Parcel() $cities = ( 'roma' , 'milano' , 'turino' );
38. Array() ne List() ne Parcel()
- # List() $cities=@( 'roma' , 'milano' , 'turino' ); # Parcel() $cities = ( 'roma' , 'milano' , 'turino' );
39. Just A List
- # List() $cities= list ( 'roma' , 'milano' , 'turino' ); # List() $cities = ||( 'roma' ,'milano' , 'turino' );
40. Array Object
- $cities = [ 'roma' , 'milano' , 'turino' ]; @cities ='roma' , 'milano' , 'turino' ; say $cities . WHAT# Array() say @cities . WHAT# Array()
41. Number Of Elements
- say length @cities ;# 3 say elems@cities ;#3 # no length
42. elems Is A Method Too
- say length @cities ;# 3 say@cities . elems ;# 3
43. On A Scalar Too
- say scalar@$cities ;# 3 say$cities . elems ;#3
44. Content From Scalar
- say @$cities ;# roma ... say$cities ;#roma ...
45. Scalar Context
- say @cities ;# roma ... say$( @cities ) ;#roma ...
46. Scalar Context
- say @cities ;# roma ... sayitem( @cities ) ;#roma ...
47. Numeric Context
- say scalar @cities ;# 3 say+ @cities ;#3
48. Numeric Context
- say scalar @$cities ;# 3 say+ $cities ;#3
49. Boolean Context
- say values @cities ;# romami... say? @cities ;#Bool::True
50. String Context
- say @cities ;# roma milano say~ @cities ;#roma milano ...
51. . Became ~
- say @cities ;# roma milano say... ~ @cities ;# ...roma mila..
52. Works in P6 Too
- say @cities ; # roma milano turino say@cities ; #roma milano turino?
53. Not Quite
- say @cities ;# roma milano ... say@cities ;#@cities
54. Add []
- say @cities ;# roma milano say@cities[] ; #roma milano ...
55. Was No Special Case
- say @cities ;# roma milano say@cities [] ; #roma milano ...
56. Perl 5 & 6
- say@cities ;# romamilanoturino say@cities ;# roma milano turino
57. When Data Gets Deeper 58. STD Perl 5
- use Data::Dumper ; say Dumper ( @cities );
59. $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::DumperO utput 60. $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"]] Too Wordy 61. He Fixed That
- use YAML ;#Data::Dumpersucks say Dump@cities ;
62. --- - 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 O utput 63. --- - 2 - 3 - 4 - 5 - 6 - 7 - 7 - 2 - 5 - - a - b - c [2, 3, 4, 5, 6, 7, 7, 2, 5, ["a", "b", "c"]] He Did It Shorter 64. Perl 6
- say@cities . perl ;
65. Perl 6
- # works to any depth say@cities . perl ; $ ["roma", "milano", "turino"]
66. Perl 5
- say$cities [ 2 ];# turino
67. Perl 6
- say$cities [ 2 ];# turino say@cities [ 2 ];# turino
68. Array In A Scalar
- say$cities [ 2 ];# Perl 6 too say@cities [ 2 ];# turino
69. Same Container Type
- $cities = [ 'roma' , 'milano' , 'turino' ]; say$cities [ 2 ];# $cities.WHAT say@cities [ 2 ];# @cities.WHAT
70. Array Objects
- say$cities [ 2 ];# Array() say@cities [ 2 ];# Array()
71. Say Is Just A Method
- say$cities [ 2 ];# turino @cities [ 2 ]. say ;# too
72. [ ] Too (Like Any Op)
- say$cities .[ 2 ];#2 is a parameter @cities .[ 2 ]. say ;# too
73. 2 == Last Index
- say$cities [ 2 ];# turino say@cities [ 2 ];# too
74. Perl 5
- say$cities [ -1 ];# turino say@cities [ 2 ];# too
75. Perl 6
- say$cities [ -1 ];# turino say@cities [* -1 ];# too
76. Whatever *
- say$cities [ -1 ];# turino say@cities [*- 1 ];# too #parameter closure with 1 argument
77. Whatever *
- say$cities [ -1 ];# turino say@cities [* /2 ]; # milano
78. Whatever *
- say$cities [ -1 ];# turino say@cities [*];# roma milano turino
79. Whatever *
- say$cities [ -1 ];# turino say@cities [];# roma milano turino # defaults to *
80. LoL
- say@cities [ 1 ][ 1 ];
81. List Of List
- @cities= [< roma .. >], [< berlin .. >]; say@cities [ 1 ][ 1 ]; say$cities [ 1 ; 1 ];
82. Let's Play A Game 83. Count the Smurfs 84. Count 85. Count
- How many elements does this list have?
86. Round 1 87. How Many Elements ?
- my@number=1 ,2 ,3 ,4 ;
88. How Many Elements ?
- my@number=1 ,2 ,3 ,4 ;# 4 my@number= ( 1 ,2 ,3 ,4 );
89. How Many Elements ?
- my@number=1 ,2 ,3 ,4 ;# 4 my@number= ( 1 ,2 ,3 ,4 );# 4 my@number=1 , ( 2 ,3 ),4 ;
90. How Many Elements ?
- my@number=1 ,2 ,3 ,4 ;# 4 my@number= ( 1 ,2 ,3 ,4 );# 4 my@number=1 , ( 2 ,3 ),4 ;# 4 my@number=1 , [ 2 ,3 ],4 ;
91. How Many Elements ?
- my@number=1 ,2 ,3 ,4 ;# 4 my@number= ( 1 ,2 ,3 ,4 );# 4 my@number=1 , ( 2 ,3 ),4 ;# 4 my@number=1 , [ 2 ,3 ],4 ;# 3 my@number= [ 1 ,2 ,3 ,4 ];
92. How Many Elements ?
- my@number=1 ,2 ,3 ,4 ;# 4 my@number= ( 1 ,2 ,3 ,4 );# 4 my@number=1 , ( 2 ,3 ),4 ;# 4 my@number=1 , [ 2 ,3 ],4 ;# 3 my@number= [ 1 ,2 ,3 ,4 ];# 1 mysub1 ,( 2 ,[ 3 ,4 ]),5 ;# in @_
93. How Many Elements ?
- my@number=1 ,2 ,3 ,4 ;# 4 my@number= ( 1 ,2 ,3 ,4 );# 4 my@number=1 , ( 2 ,3 ),4 ;# 4 my@number=1 , [ 2 ,3 ],4 ;# 3 my@number= [ 1 ,2 ,3 ,4 ];# 1 mysub1 ,( 2 ,[ 3 ,4 ]),5 ;# 4 # all between name & ;
94. Round 2 95. How Many Elements ?
- my$number=1 ,2 ,3 ,4 ;
96. How Many Elements ?
- my$number=1 ,2 ,3 ,4 ;# 1 my$number= ( 1 ,2 ,3 ,4 );
97. How Many Elements ?
- my$number=1 ,2 ,3 ,4 ;# 1 my$number= ( 1 ,2 ,3 ,4 );# 4 my$number=1 , ( 2 ,3 ),4 ;
98. How Many Elements ?
- my$number=1 ,2 ,3 ,4 ;# 1 my$number= ( 1 ,2 ,3 ,4 );# 4 my$number=1 , ( 2 ,3 ),4 ;# 1 my$number= ( 1 ,2 ),3 ,4 ;
99. How Many Elements ?
- my$number=1 ,2 ,3 ,4 ;# 1 my$number= ( 1 ,2 ,3 ,4 );# 4 my$number=1 , ( 2 ,3 ),4 ;# 1 my$number= ( 1 ,2 ),3 ,4 ;# 2 my$number= ( 1 , [ 2 ,3 ],4 );
100. How Many Elements ?
- my$number=1 ,2 ,3 ,4 ;# 1 my$number= ( 1 ,2 ,3 ,4 );# 4 my$number=1 , ( 2 ,3 ),4 ;# 1 my$number= ( 1 ,2 ),3 ,4 ;# 2 my$number= ( 1 , [ 2 ,3 ],4 );# 3 my$number= [ 1 ,2 ,3 ,4 ];
101. How Many Elements ?
- my$number=1 ,2 ,3 ,4 ;# 1 my$number= ( 1 ,2 ,3 ,4 );# 4 my$number=1 , ( 2 ,3 ),4 ;# 1 my$number= ( 1 ,2 ),3 ,4 ;# 2 my$number= ( 1 , [ 2 ,3 ],4 );# 3 my$number= [ 1 ,2 ,3 ,4 ];# 4
102. Round 3 103. How Many Elements ?
- my$pd = my@pd= ( 3 ,1 ,4 ,1 );
104. How Many Elements ?
- my$pd = my@pd= ( 3 ,1 ,4 ,1 ); @number=1 , @pd ,4 ;
105. How Many Elements ?
- my$pd = my@pd= ( 3 ,1 ,4 ,1 ); @number=1 ,@pd ,4 ;# 6 @number=1 ,$pd ,4 ;
106. How Many Elements ?
- my$pd = my@pd= ( 3 ,1 ,4 ,1 ); @number=1 ,@pd ,4 ;# 6 @number=1 ,$pd ,4 ;# 3 @number=1 ,@pd . item , 4 ;
107. item & list = Conext Ops
- 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 ;
108. Nil = Nothing
- 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 ;
109. Nil = Nothing
- 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
110. And The Winner Is ... 111. Perl 5
- @digits = (4) x5 ;# (4,4,4,4,4)
112. Perl 6
- @digits = (4) x5 ;# (4,4,4,4,4) @digits =4xx5 ;# 4,4,4,4,4
113. Multiply Strings
- @digits =4x5 ;# '44444' @digits =4x5 ;# '44444'
114. Multiply Strings
- @digits =4x5 ;# '44444' @digits = ( 4 ) x5 ;# '44444'
115. Multiply Strings
- @digits ='1 2' x3 ;# '1 21 21 2' @digits = ( 1 , 2 ) x3 ;# '1 21 21 2'
116. Multiply Lists
- @digits = ( 1 , 2 ) x3 ;#1,2,1,2,1,2 @digits = ( 1 , 2 ) xx3 ;#1,2,1,2,1,2
117. Perl 5
- @digits = (0..9);# range op
118. Perl 5 & 6
- @digits = (0..9);
119. Perl 6
- @digits =0..9 ;
120. Perl 6
- @digits = ^10 ;# 0 .. 9
121. 0 Is Given
- @digits =0..^10 ;# 0 .. 9
122. ^ Excludes The Range
- @digits =-1^..^10 ;# 0 .. 9
123. Sequence Operator
- @digits =0...9 ;
124. Linear
- @digits =0...9 ;# 0 .. 9
125. Arithmetic
- @digits =0...9 ;# 0 .. 9 @odd =1 , 39 ;# 1,3,5,7,9
126. Geometric
- @digits =0...9 ;# 0 .. 9 @odd =1 , 39 ;# 1,3,5,7,9 @bin =1 , 2 , 41024 ; #..,8,16,32,.
127. Fibonacci
- @digits =0...9 ;# 0 .. 9 @odd =1 , 39 ;# 1,3,5,7,9 @bin =1 , 2 , 41024 ; #..,8,16,32,. @fib =0 , 1 ,*+* 144 ;#..,1,2,3,..
128. Watch Your Limit
- @odd =1 , 310 ;# 1,3,.. *
129. Infinite List
- @odd =1 , 310 ;# 1,3,.. * @number =0.. *;# 0 .. Inf
130. Certain Elements
- @odd =1 , 310 ;# 1,3,.. * @number =0.. *;# 0 .. Inf say @odd [ 1 ];# 3 say @number [ 5 ];# 4
131. All Elements
- @odd =1 , 310 ;# 1,3,.. * @number =0.. *;# 0 .. Inf say @odd [*];# waiting ... say @number ;# lots of digits
132. Number Of Elements
- @odd =1 , 310 ;# 1,3,.. * @number =0.. *;# 0 .. Inf say +@odd ;# waiting ... say @number ;# lots of digits
133. What Happened?
- $number =0.. *;# 0 .. Inf say $number . WHAT ; # Range()
134. Guess Output?
- $number =0.. *;# 0 .. Inf say $number ;# ?
135. First Element
- $number =0.. *;# 0 .. Inf say $number ;# 0
136. Infinite List
- $number =0.. *;# 0 .. Inf say @( $number );# digits ...
137. Array
- @number =0.. *;# 0 .. Inf say @number [ 5 ];
138. Generates As Needed
- @number =0.. *;# 0 .. Inf say @number [ 5 ];# @number.reify(5)
139. Internal Representation
- @number =0.. *;# 0 .. Inf say @number . reify ( 5 ). perl ; # (0, 1, 2, 3, 4, 5, 6..*)
140. You Know These
- shiftunshift pushpopsplicereverse mapgrep
141. Perl 5
- %opera = ( 'verdi'=>'Aida' , 'puccini'=>'Turandot' , 'rossini' =>'Il barbiere' , );
142. Perl 6
- %opera = ( 'verdi'=>'Aida' , 'puccini'=>'Turandot' , 'rossini' =>'Il barbiere' , );
143. No Grouping Needed
- %opera = 'verdi'=>'Aida' , 'puccini'=>'Turandot' , 'rossini' =>'Il barbiere' , ;
144. Still Hash Object
- %opera ='verdi'=>'Aida' , 'puccini'=>'Turandot' , 'rossini' =>'Il barbiere' , ; %opera . WHAT eq 'Hash()'
145. New Pair Syntax
- %opera = : verdi ( 'Aida' ), : puccini ( 'Turandot' ), : rossini ( 'Il barbiere' ), ; %opera . WHAT eq 'Hash()'
146. With Autoquoting
- %opera =: verdi < Aida >, : puccini < Turandot >, : rossini < Il barbiere >, ; %opera . WHAT eq 'Hash()'
147. Item Context
- $opera =: verdi < Aida >, : puccini < Turandot >, : rossini < Il barbiere >, ; $opera . WHAT eq 'Pair()'
148. With Grouping
- $opera =( : verdi < Aida >, : puccini < Turandot >, : rossini < Il barbiere >, ); %opera . WHAT eq 'Parcel()'
149. Parcel Know Positions
- $opera =( : verdi < Aida >, : puccini < Turandot >, : rossini < Il barbiere >, ); 0 verdi Aida 1 puccini Turandot 2 rossini Il barbiere
150. Hash Context Op
- $opera =%( : verdi < Aida >, : puccini < Turandot >, : rossini < Il barbiere >, ); %opera . WHAT eq 'Hash()'
151. Hash Context Op
- $opera =hash( : verdi < Aida >, : puccini < Turandot >, : rossini < Il barbiere >, ); %opera . WHAT eq 'Hash()'
152. Hash Generator Op
- $opera ={ : verdi < Aida >, : puccini < Turandot >, : rossini < Il barbiere >, }; %opera . WHAT eq 'Hash()'
153. Hash Generator Op
- %opera ={ : verdi < Aida >, : puccini < Turandot >, : rossini < Il barbiere >, }; %opera . WHAT eq 'Hash()'
154. Invariant Sigils
- %opera { 'rossini' };# Il barbiere
155. Invariant Sigils
- %opera .{ 'rossini' };# alias .at_key()
156. Remember qw() ?
- %opera { 'rossini' };# Il barbiere %opera < rossini >;
157. With Interpolation
- %opera { 'rossini' };# Il barbiere %opera < rossini >;%opera >;
158. Get 2 Operas
- %opera { 'rossini' ,'puccini' }; %opera < rossini puccini >;%opera >;
159. Also Just Hashes
- $opera { 'rossini' ,'puccini' }; $opera < rossini puccini >;$opera >;
160. Works On Parcel() Too
- $opera { 'rossini' ,'puccini' }; $opera < rossini puccini >;$opera >;
161. Hash Methods
- %opera . keys ;# verdi puccini ro... %opera . values ;# aida turandot ... %opera . kv ;# verdi aida puccini ...
162. On Arrays Too
- @cities . keys ;# 0 1 2 @cities . values ;# roma milano ... @cities . kv ;# 0 roma 1 milano 2 ...
163. On Pairs
- $opera . key ;# rossini $opera . value ;# Il barbiere $opera . kv ;#
164. Other Hash Methods
- %opera . pairs ;# list of pair obj. %opera . exists ;# Bool %opera . delete ;# 1 | 0
165. Other Methods
- %opera . pairs ;# list of pair obj. %opera . exists ;# one at a time %opera . delete ;# one at a time
166. Hash In Context
- ?%opera ;# bool context +%opera ;# num context ~%opera ;# string context
167. Hash In Context
- ?%opera ;# Bool::True +%opera ;# 3 ~%opera ;# rossini Il barbiere
168. Value In Context
- ?%opera ;# Bool::True +%opera ;# 3 ~%opera ;# rossini Il barbiere
169. New Hash Method
- say%opera . invert ; Aidaverdi Turandotpuccini Il barbiererossini
170. Hash Generator
- my%h=@cities . classify( {uc substr ($_ , 0 , 1) } ); say %h ; $ Rroma Mmilano Tturino
171. Hash Generator
- @cities . categorize ({catsub ( $_ ) }); say %h . perl ;
172. Hash Generator
- @cities . categorize ({water ( $_ ) }); say %h . perl ; {"mare" => ["roma"], "fiume" => ["roma", "milano", "turino"], "lago" => Nil}
173. ==>
- Pipes
174. Schwartz. Transform
- @results =map{},sort{},map{...},@input ;
175. Schwartz. Transform
- @results =map{},sort{},map{...},@input ; @results =map{} > [ ] [ ] X Z S
182. Hyperoperator
- >>
183. Hyperoperator
- >> .hyper()
184. Simple Example
- ( 1 .. 5 ) >>++
185. That Works
- @number >>++
186. Result
- @number >>++ 2 ,3 ,4 ,5 ,6
187. More Complicated
- ( 1 .. 5 ) >>+>> 1
188. Check Your Spaces
- (1..5) _ >>+>> _ 1
189. Same Result
- ( 1 .. 5 ) >>+>> 1 2 ,3 ,4 ,5 ,6
190. Reverse Hyper
- ( 1 .. 5 ) 1
195. Preserves LoL !
- ( 1 .. 5 , [ 6 .. 9 ]) >>+>> 1 2 ,3 ,4 ,5 ,6 , [ 7 ,8 ,9 , 10 ]
196. On 2 Sides ?
- ( 1 .. 5 , [ 6 .. 9 ]) >>+>+>+>+ < 1a 2b 3c 4d 5e 6f ...>
225. Zip
- for @aZ@b -> $a ,$b{
226. Zip
- ( 1 .. 4 ) Z+ ( 1 .. 4 )
227. Zip
- ( 1 .. 4 ) Z+ ( 1 .. 4 ) 2 ,4 ,6 ,8
228. Metaops
- >> [ ] [ ] X Z S
229. Sequence
- .sequence S
230. __END__ ? 231. =begin END 232. Thank You