Ce diaporama a bien été signalé.
Nous utilisons votre profil LinkedIn et vos données d’activité pour vous proposer des publicités personnalisées et pertinentes. Vous pouvez changer vos préférences de publicités à tout moment.

P6kontext2014

484 vues

Publié le

A tour through Perl 6 Operators

Publié dans : Logiciels
  • Soyez le premier à commenter

  • Soyez le premier à aimer ceci

P6kontext2014

  1. 1. Perl 6 in Kontext
  2. 2. Bisher: Allgemein Array / Hash Regex OOP
  3. 3. lichtkind.de Allgemein Array / Hash Regex OOP
  4. 4. Alle großen Themen Übersicht Variablen Parser Abstraktion
  5. 5. Alle großen Themen Variablen Parser Abstraktion Ausdrücke
  6. 6. OOP ==> OOL Array / Hash Regex OOP Operatoren
  7. 7. OOP ==> OOL Operator Oriented Language
  8. 8. Perl 6 in Kontext
  9. 9. 1 Wort zu Operatoren
  10. 10. Operatoren Piktogramme
  11. 11. Operatoren Piktogramme schnelle Orientierung
  12. 12. Operatoren Piktogramme schnelle Orientierung wie Einrückungen
  13. 13. Operatoren Piktogramme schnelle Orientierung wie Leerzeilen
  14. 14. Perl 6 in Kontext
  15. 15. Perl 5 in Kontext
  16. 16. Perl 5 in Kontext wantarray
  17. 17. Kontext: wantarray true (else) - array false (0|'') - scalar undef - void
  18. 18. Perl 6 in Kontext kein wantarray !!!
  19. 19. P6 Innereien Kontext = Datentyp = Klasse
  20. 20. Typklassen: Num Str Array Hash ...
  21. 21. Wie Gewohnt my $l = 12; my $d = 'text';
  22. 22. Aber Implizit: my Num $l = 12; my Str $d = 'text';
  23. 23. Wer Java kennt: public method to_string {
  24. 24. In P6 meist implizit $var.to_string();
  25. 25. Perl 5 in Kontext $nr =()= $str =~ /.../g;
  26. 26. Goatse Secret Op $nr =()= $str =~ /.../g;
  27. 27. Fordert List Kontext $nr =()= $str =~ /.../g;
  28. 28. Explizit in Perl 6 @() array
  29. 29. Explizit in Perl 6 $() scalar @() array %() hash &() code
  30. 30. Perl 6 in Kontext $ scalar @ array % hash
  31. 31. Invariante Sigils $ scalar @ array % hash
  32. 32. Invariante Sigils $scalar @array %hash
  33. 33. Zeigen kein Kontext $scalar @array[5] %hash{'key'}
  34. 34. Schreiben wir so $scalar @array[5] %hash<key>
  35. 35. Sigils $ scalar @ positional % assoziativ & aufrufbar
  36. 36. Kontextoperatoren $() scalar @() array %() hash &() code
  37. 37. Langversion $() item() @() list() %() hash() &() code()
  38. 38. Klammern optional $() item() @() list() %() hash() &() code()
  39. 39. Item Kontext $() item() @() list() %() hash() &() code()
  40. 40. List Kontext $() item() @() list() %() hash() &() code()
  41. 41. P5 List Kontext $() item() flat() %() hash() &() code()
  42. 42. Hash Kontext $() item() @() list() %() hash() &() code()
  43. 43. Code Kontext $() item() @() list() %() hash() &() code()
  44. 44. Mehr Kontext Ops ~ string + numeric ? boolean
  45. 45. Negierende Ops ~ string + - numeric ? ! boolean
  46. 46. Beispiel ohne () ~@list +@list ?@list
  47. 47. Kontext Ops ~@list @list[0].@list[1] +@list ?@list
  48. 48. Kontext Ops ~@list @list[0].@list[1] +@list @list.elems ?@list
  49. 49. Kontext Ops ~@list @list[0].@list[1] +@list @list.elems ?@list @list.elems > 0
  50. 50. Bool Kontext ?
  51. 51. Bool Kontext ? ! ?^ ?| ?& ^ | & // ^^ || && ff fff ?? !!
  52. 52. Bool Kontext ? ! ?^ ?| ?& ^ | & // ^^ || && ff fff ?? !!
  53. 53. Bool Kontext ?
  54. 54. Bool Kontext my $var = 45; say ?$var;
  55. 55. Bool Kontext my $var = 45; say ?$var; True
  56. 56. Bool Kontext my $var = 45; say ?$var; True Bool::True in Stringkontext
  57. 57. Bool Kontext my $var = 45; say !$var; False Bool::False in Stringkont.
  58. 58. Ist das so? my $var = e; say so($var); True Bool::True in Stringkontext
  59. 59. Ist das nicht so? my $var = e; say not $var; False Bool::False in Stringkont.
  60. 60. Hohe Präzedenz my $var = 45; say ?$var + 1;
  61. 61. Hohe Präzedenz my $var = 45; say ?$var + 1; 2 True in Numkontext = 1
  62. 62. Niedrige Präzedenz my $var = 45; say so $var + 1;
  63. 63. Niedrige Präzedenz my $var = 45; say so $var + 1; True 46 im Boolkontext = True
  64. 64. Bool Kontext my $var = 45; say 1 if $var + 1; 1 46 im Boolkontext = True
  65. 65. Bool Kontext my $var = 45; say 1 if $var + 1; 1 If unless while until
  66. 66. Das War einfach! ? ! ?^ ?| ?& ^ | & // ^^ || && ff fff ?? !!
  67. 67. What the Op? ?^ ?| ?&
  68. 68. Forciert Bool Kontext ?^ ?| ?&
  69. 69. Ja, ja logische Ops ?^ ?| ?&
  70. 70. 1+2 = ? ?^ ?| ?&
  71. 71. Was könnt das sein? say 0 ?| 'wald';
  72. 72. Was könnt das sein? say 0 ?| 'wald'; True False or True = True
  73. 73. Was könnt das sein? say 5 ?^ 0.0;
  74. 74. Was könnt das sein? say 5 ?^ 0.0; True True xor False = True
  75. 75. Ein Sinn eröffnet sich ? ! ?^ ?| ?& ^ | & // ^^ || && ff fff ?? !!
  76. 76. Hmmmmm ? ^ | &
  77. 77. Hmmmmm ? $var = 0 | 'wald'; say $var;
  78. 78. schlauer ? $var = 0 | 'wald'; say $var; any(0, wald)
  79. 79. Junctions ! $var = 0 | 'wald'; say $var; any(0, wald) wörtlich: 0 oder 'Wald'
  80. 80. Junctions ! 0 | 1 | 3 | 7 = any(0,1,3,7);
  81. 81. Junctions ! 2 ~~ 0 | 1 | 3 | 7
  82. 82. Junctions ! 2 ~~ 0 | 1 | 3 | 7 False
  83. 83. Junctions ! 1 == 0 | 1 | 3
  84. 84. Junctions ! 1 == 0 | 1 | 3 any(False, True, False)
  85. 85. Junctions ! if $val == 0 | 1 | 3 { ...
  86. 86. Junctions ! if $val == 0 | 1 | 3 { ... True
  87. 87. Junctions ! if $val == 0 | 1 | 3 { ... any(False, True, False).to_bool
  88. 88. Es lichtet sich ? ! ?^ ?| ?& ^ | & // ^^ || && ff fff ?? !!
  89. 89. ! Forciert Kontext // ^^ || && ff fff
  90. 90. Kurzschluß ODER tu_dies() || tu_das();
  91. 91. Short Circuit OR tu_dies() || tu_das(); tu_das() unless tu_dies();
  92. 92. Defined OR dies() // das();
  93. 93. Defined OR dies() // das(); das() unless defined dies();
  94. 94. Kurzschluß UND tu_dies() && tu_das(); tu_das() if tu_dies();
  95. 95. Kurzschluß XOR tu_dies() ^^ tu_das();
  96. 96. Kurzschluß XOR tu_dies() ^^ tu_das(); my $var = tu_dies(); if not $var { $var } else { tu_das() }
  97. 97. Kein else mit unless tu_dies() ^^ tu_das(); my $var = tu_dies(); if not $var { $var } else { tu_das() }
  98. 98. Alle Kurzschluß tu_dies() || tu_das(); tu_dies() // tu_das(); tu_dies() && tu_das(); tu_dies() ^^ tu_das();
  99. 99. Grenzwerte $a min $b $a max $b $a minmax $b
  100. 100. Grenzwerte $a min $b $a max $b minmax @a
  101. 101. Flipflop anfang() ff ende(); anfang() fff ende();
  102. 102. War .. | … in Skalar K. while … { tu() if anfang() ff ende(); tu() if anfang() fff ende(); }
  103. 103. Fast am Ziel ? ! ?^ ?| ?& ^ | & // || && ?? !!
  104. 104. Ternärer Op ?? !!
  105. 105. Ternärer Op war früher ? : ?? !!
  106. 106. Ternärer Op war früher ? : wertet in Boolkontext aus ?? !!
  107. 107. Ternärer Op war früher ? : wertet in Boolkontext aus return Wert unverändert ?? !!
  108. 108. Soweit Klar? ? ! ?^ ?| ?& ^ | & // || && ?? !!
  109. 109. Numeric Kontext + - * / % %% ** +^ +| +& +< +>
  110. 110. Weiß Jeder :) + - * / % %% ** +^ +| +& +< +>
  111. 111. Modulo 7 / 3 7/3(2.333) | 2
  112. 112. Modulo 7 % 3
  113. 113. Modulo 7 % 3 7 = 3 * 2 + 1
  114. 114. ModMod? 7 %% 3
  115. 115. Teilbar 7 %% 3 False => R 1
  116. 116. Numeric Kontext + - * / % %% ** +^ +| +& +< +>
  117. 117. Bitweise Logik +^ +| +&
  118. 118. Bitweiser Shift +< +>
  119. 119. Numeric Kontext + - * / % %% ** +^ +| +& +< +>
  120. 120. Was Vergessen ?
  121. 121. Was Vergessen ? ++ --
  122. 122. Geordnete Mengen ++ after - - before cmp
  123. 123. Geordnete Mengen cmp: Less, Same, More
  124. 124. Geordnete Mengen cmp: Less, Same, More -1, 0, 1
  125. 125. Reihenfolge in Kontext <=> leg cmp
  126. 126. Reihenfolge in Kontext <=> Num Kontext leg Str Kontext cmp allgemein
  127. 127. Reihenfolge in Kontext < Num Kontext lt Str Kontext before allgemein
  128. 128. Reihenfolge in Kontext > Num Kontext gt Str Kontext after allgemein
  129. 129. Geordnete Mengen ++ 1 after - - 1 before
  130. 130. Gleichheit in Kontext == Num Kontext eq Str Kontext === allgemein
  131. 131. Gleichheit in Kontext == Num Kontext eq Str Kontext eqv allgemein
  132. 132. Gleichheit in Kontext === statische Analyse eqv dynamisch =:= gebunden
  133. 133. Reihenfolge in Kontext if 2 eqv 2.0 {
  134. 134. Typ-, dann Inhaltcheck if 2 eqv 2.0 { Int() vs. Rat()
  135. 135. Typ-, dann Inhaltcheck if 2 == 2.0 {
  136. 136. Typ-, dann Inhaltcheck if 2 == 2.0 { True (Num Kontext)
  137. 137. Numeric Kontext + - * / % %% ** +^ +| +& +< +>
  138. 138. String Kontext ~ ~^ ~| ~& ~~ x
  139. 139. Perlige to_string ~
  140. 140. War mal der . ~ say 'kombiniere' ~ 'Watson';
  141. 141. String Kontext ~ ~^ ~| ~& ~~ x
  142. 142. Zeichenweise Logik ~^ ~| ~&
  143. 143. Zeichenweise Logik 1 +| 2 = 3 'a' ~| 'b' = 'c'
  144. 144. String Kontext ~ ~^ ~| ~& ~~ x
  145. 145. String Kontext ~ ~^ ~| ~& ~~ x
  146. 146. String Kontext say '-' x 80;
  147. 147. String Kontext ~ ~^ ~| ~& ~~ x
  148. 148. List Kontext , … xx X Z <<== <== ==> ==>>
  149. 149. Komma Operator @fib = 1, 1, 2, 3, 5;
  150. 150. Komma Operator $fib = (1, 1, 2, 3, 5);
  151. 151. Komma Operator $fib = (1); say $fib.WHAT; Int
  152. 152. Komma Operator $fib = (1 ,); say $fib.WHAT;
  153. 153. Komma Operator $fib = (1 ,); say $fib.WHAT; Parcel
  154. 154. Komma Operator $fib = (1 ,); say $fib.WHAT; Parameter Liste
  155. 155. Capture Kontext | benannte Parameter || positionale Parameter
  156. 156. List Kontext , … xx X Z <<== <== ==> ==>>
  157. 157. Sequence Operator $d = 1, 2 … 9;
  158. 158. Yadda Operator sub befriede { … }
  159. 159. Yadda Operator sub befriede { … } sub befriede { ??? } sub befriede { !!! }
  160. 160. Sequence Operator $d = 0, 1 … 9;
  161. 161. kann Range Op nicht! $d = 9, 8 … 0;
  162. 162. kann Range Op nicht! $d = 9 .. 0;
  163. 163. Sequence Operator $zp = 1, 2, 4… 256;
  164. 164. Sequence Operator $fib = 1, 1, *+* … *;
  165. 165. Was vergessen? $d = 0 .. 9;
  166. 166. Was vergessen? say 0 .. 9;
  167. 167. Keine Liste? say 0 .. 9; 0..9
  168. 168. Bestimmt Kontext say (0 .. 9);
  169. 169. Keine Liste ? say (0 .. 9); 0..9
  170. 170. Was ist es denn? say (0 .. 9).WHAT;
  171. 171. Range ??? say (0 .. 9).WHAT; Range
  172. 172. Range ??? say 5 ~~ 0 .. 9; True
  173. 173. So geht Liste say @(0..9).WHAT; List
  174. 174. List - Ausgabe? say @(0 .. 9); 0 1 2 3 4 5 6 7 8 9
  175. 175. for macht Listkontext say $_ for 0 .. 9; 0 1 2 3 4 5 6 7 8 9
  176. 176. for macht Listkontext say for 0 .. 9;
  177. 177. for macht Listkontext .say for 0 .. 9; 0 1 2 3 4 5 6 7 8 9
  178. 178. List Kontext , … xx X Z <<== <== ==> ==>>
  179. 179. Spielen mit Listen xx X Z
  180. 180. xx Operator
  181. 181. xx Operator say 'eins zwo eins zwo';
  182. 182. xx Operator say 'eins zwo eins zwo'; say q:words(eins zwo) xx 2;
  183. 183. xx Operator say 'eins zwo eins zwo'; say q:words(eins zwo) xx 2; say q:w(eins zwo) xx 2;
  184. 184. 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;
  185. 185. 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;
  186. 186. X Operator say <eins zwo> X <dan rabauke>;
  187. 187. Kartesisches Produkt say <eins zwo> X <dan rabauke>; eins dan eins rabauke zwo dan zwo rabauke
  188. 188. Z Operator say <eins zwo> Z <dan rabauke>;
  189. 189. Reißverschluss say <eins zwo> Z <dan rabauke>; eins dan zwo rabauke
  190. 190. Reißverschluss say <eins zwo> zip <dan rabauke>; eins dan zwo rabauke
  191. 191. Reißverschluss for @li Z @re -> $l, $r {
  192. 192. List Kontext , xx X Z <<== <== ==> ==>>
  193. 193. Schwartz Transform my @output = map { $_->[0] } sort { $a->[1] cmp $b->[1] } map { [$_,expensive_func($_)] } @input;
  194. 194. Pipe Operator my @output <== map { $_[0] } <== sort { $^a[1] cmp $^b[1] } <== map { [$_,expensive_func($_)] } <== @input;
  195. 195. Andere Richtung @input ==> map { [$_,expensive_func($_)] } ==> sort { $^a[1] cmp $^b[1] } ==> map { $_[0] } ==> my @output;
  196. 196. Append Mode my @output <<== map { $_[0] } <<== sort { $^a[1] cmp $^b[1] } <<== map { [$_,expensive_func($_)] } <<== @input;
  197. 197. Pointy Sub for @input -> $i { ...
  198. 198. List Kontext , xx X Z <<== <== ==> ==>>
  199. 199. MetaOps = ! X Z R S [] [] << >>
  200. 200. Meta Op = @summe += 3;
  201. 201. Meta Op ! if $alter !< 18 {
  202. 202. Meta Op ! if $alter !< 18 { # echter P6 code
  203. 203. Meta Op R $alter = 2 R- 18; # == 16
  204. 204. Meta Op S $alter = 2 S- 18; # == -16
  205. 205. Meta Op S $alter = 2 S- 18; # kein sichtbarer Effekt
  206. 206. Meta Op S $alter = 2 S- 18; # ! Parallelisierung
  207. 207. Meta Op S $alter = 2 S- 18; # ! später wichtiger
  208. 208. MetaOps = ! X Z R S [] [] << >>
  209. 209. Meta Op X
  210. 210. Wir erinnern say <1 2> X <a b> 1 a 1 b 2 a 2 b
  211. 211. Wir erinnern <1 2> X <a b> <1 a 1 b 2 a 2 b>
  212. 212. Kartesisches Produkt <1 2> X <a b> '1','a','1','b','2','a','2','b'
  213. 213. Kartesischen Paare <1 2> X~ <a b> '1a','1b','2a','2b'
  214. 214. Kartesisches Produkt <1 2> X+ <a b> Stacktrace
  215. 215. Kartesischen Paare <1 2> X* <3 4> 3, 4, 6, 8
  216. 216. Meta Op Z # manche ahnen was kommt
  217. 217. Metaop Z <1 2> Z* <3 4> 3, 8
  218. 218. Metaop Z (<1 2>;<3 4>).zipwith(&[*]) 3, 8
  219. 219. Metaop Z (<1 2>;<3 4>).zipwith(&[*]) <1 2> Z* <3 4>
  220. 220. Metaop Z (<1 2>;<3 4>).zip() <1 2> Z <3 4>
  221. 221. Metaop Z (<1 2>;<3 4>).cross() <1 2> X <3 4>
  222. 222. Metaop Z (<1 2>;<3 4>).crosswith(&[*]) <1 2> X* <3 4>
  223. 223. MetaOps = ! X Z R S [] [] << >>
  224. 224. Meta Op []
  225. 225. Mach mir den Gauss (1..100).reduce(&[+])
  226. 226. Forciert List Kontext (1..100).reduce(&[+]) [+] 1 .. 100
  227. 227. Forciert List Kontext True [<] 1 .. 100
  228. 228. Whats datn? (1..100).triangle(&[+]) [+] 1 .. 100
  229. 229. Whats datn? 1, 3, 6 [+] 1 .. 3
  230. 230. Whats datn? 1=1, 1+2=3, 1+2+3=6 [+] 1 .. 3
  231. 231. Meta Op <<
  232. 232. Geburtstagsfeier !!! @alter >>+=>> 1;
  233. 233. Alle werden älter @alter == 18, 22, 35; @alter = @alter >>+>> 1; @alter == 19, 23, 36;
  234. 234. Nur einer wird älter @alter == 18, 22, 35; @alter = @alter <<+<< 1; @alter == 19;
  235. 235. Interessante Fälle <18, 22, 35> >>+<< <1, 2> <18, 22, 35> <<+>> <1, 2>
  236. 236. Interessante Fälle <18, 22, 35> >>+<< <1, 2> ERROR <18, 22, 35> <<+>> <1, 2> 19, 24, 36
  237. 237. Komplexität ++ ~~ heute nicht
  238. 238. Danke vv

×