Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
Operator::Util Nick Patch Perl Seminar NY 15 February 2011
Slide 2
Slide 2 text
released yesterday
Slide 3
Slide 3 text
released yesterday i ♥ feedback
Slide 4
Slide 4 text
Perl 6 is pretty cool
Slide 5
Slide 5 text
meta-operators
Slide 6
Slide 6 text
meta-operators [ ] Z X » « ☺ ☺ ☺ ☺
Slide 7
Slide 7 text
reduction [+] 1..4 # 10 [*] 1..4 # 24 [~] 'a'..'d' # 'abcd'
Slide 8
Slide 8 text
zip (1,2) Z+ (2,3) # 3,5 (1,2) Z* (2,3) # 2,6 (1,2) Z~
# 1a,2b
Slide 9
Slide 9 text
cross (flat) (1,2) X+ (2,3) # 3,4,4,5 (1,2) X* (2,3) # 2,3,4,6 (1,2) X~
# 1a,1b,2a,2b
Slide 10
Slide 10 text
cross (lol) (1,2) X+ (2,3) # [3,4],[4,5] (1,2) X* (2,3) # [2,3],[4,6] (1,2) X~
# [1a,1b],[2a,2b]
Slide 11
Slide 11 text
hyper 1..4 »~« 'a'..'d' # 1a,2b,3c,4d 1..4 »~» 'x' # 1x,2x,3x,4x 1..4 «~» # 1x,2y,1x,2y 1..4 «~« # 1x,2y
Slide 12
Slide 12 text
more hyper! -« (1,2,3) # -1,-2,-3 [1,[2,3]] »++ # [2,[3,4]] %foo «+» %bar # intersection %foo »+« %bar # union %foo »+=« %bar # %foo = union
Slide 13
Slide 13 text
but it's not Xmas yet
Slide 14
Slide 14 text
cpanm Operator::Util
Slide 15
Slide 15 text
use Operator::Util qw( reducewith zipwith crosswith hyperwith );
Slide 16
Slide 16 text
reducewith a.k.a. reduce hyperwith a.k.a. hyper
Slide 17
Slide 17 text
reduction reduce('+', [1..4]) # 10 reduce('*', [1..4]) # 24 reduce('.', ['a'..'d']) # 'abcd'
Slide 18
Slide 18 text
zip zipwith('+', [1,2], [2,3]) # 3,5 zipwith('*', [1,2], [2,3]) # 2,6 zipwith('.', [1,2], ['a','b']) # 1a,2b
Slide 19
Slide 19 text
cross (flat) crosswith('+', [1,2], [2,3]) crosswith('*', [1,2], [2,3]) crosswith('.', [1,2], ['a','b']) # 3,4,4,5 # 2,3,4,6 # 1a,1b,2a,2b
Slide 20
Slide 20 text
cross (lol) crosswith('+', [1,2], [2,3], flat=>0) crosswith('*', [1,2], [2,3], flat=>0) crosswith('.', [1,2], ['a','b'], flat=>0) # [3,4],[4,5] # [2,3],[4,6] # [1a,1b],[2a,2b]
Slide 21
Slide 21 text
hyper hyper('.', [1..4], ['a'..'d'] ); hyper('.', [1..4], 'x', dwim_right=>1); hyper('.', [1..4], ['x','y'], dwim=>1 ); hyper('.', [1..4], ['x','y'], dwim_left=>1 ); # 1a,2b,3c,4d # 1x,2x,3x,4x # 1x,2y,1x,2y # 1x,2y
Slide 22
Slide 22 text
more hyper! hyper('prefix:-', [1,2,3]); hyper('postfix:++', [1,[2,3]]); hyper('+', \%foo, \%bar, dwim=>1); hyper('+', \%foo, \%bar); hyper('+=', \%foo, \%bar); # -1,-2,-3 # [2,[3,4]] # intersection # union # %foo = union
Slide 23
Slide 23 text
default ops zipwith(',', [1,2], ['a','b']) zip( [1,2], ['a','b']) crosswith(',', [1,2], ['a','b']) cross( [1,2], ['a','b']) # 1,a,2,b # 1,a,2,b # 1,a,1,b,2,a,2,b # 1,a,1,b,2,a,2,b
Slide 24
Slide 24 text
associativity reduce('-', [4, 3, 2]) reduce('**', [4, 3, 2]) # 4-3-2 = (4-3)-2 = -1 # 4**3**2 = 4**(3**2) = 262144
Slide 25
Slide 25 text
chaining reduce('eq', \@a) # all elements eq? reduce('!=', \@c) # no repeating elements? reduce('<', \@b) # ascending elements?
Slide 26
Slide 26 text
dwim for < 2 elems reduce('+', [] ) # 0 reduce('+', [5]) # 5 reduce('*', [] ) # 1 reduce('*', [5]) # 5
Slide 27
Slide 27 text
even more hyper! hyper('->', \@objects, 'run', dwim=>1) hyper('+', [[1, 2], 3], [4, [5, 6]], dwim=>1) hyper('prefix:-', {a => 1, b => 2, c => 3}) # call ->run() on each # [[5, 6], [8, 9]] # a => -1, b => -2, c => -3
Slide 28
Slide 28 text
resources git: github.com/patch slides: patch.github.com