Slide 1

Slide 1 text

I❤zip (car (cdr ϑΝϯΫγϣϯ۞ָ෦)) 12.07.2017

Slide 2

Slide 2 text

I❤zip kunou@esm •ࣾ಺ͷษڧձͰ ClojureΛॻ͍ͯ·͢ •ࠓ೥ͷ໺๬͸Haskell Λ֮͑Δ͜ͱͩͬͨ ʢաڈܗʣ

Slide 3

Slide 3 text

I❤zip ޷͖ͳؔ਺ zip

Slide 4

Slide 4 text

I❤zip ޷͖ͳؔ਺ zip 当然ながらこれの話ではありません ☓

Slide 5

Slide 5 text

I❤zip ޷͖ͳؔ਺ zip (zip [1 2 3] [4 5 6]) => ((1 4) (2 5) (3 6))

Slide 6

Slide 6 text

I❤zip ޷͖ͳؔ਺ zip でもClojureにはzipがない…… (zipmapはあるけど)

Slide 7

Slide 7 text

I❤zip ޷͖ͳؔ਺ zip でもClojureにはzipがない…… (zipmapはあるけど) (defn zip [a b] (map list a b))

Slide 8

Slide 8 text

I❤zip zipのよくある使い方 普通に使う (zip [1 2 3] [4 5 6]) => ((1 4) (2 5) (3 6))

Slide 9

Slide 9 text

I❤zip zipのよくある使い方 indexを付ける
 Clojureならmap-indexedを使えと言う話は置いておいて (zip (iterate inc 0) [:a :b :c :d :e]) => ((0 :a) (1 :b) (2 :c) (3 :d) (4 :e))

Slide 10

Slide 10 text

I❤zip zipのちょっと変わった使い方

Slide 11

Slide 11 text

I❤zip zipのちょっと変わった使い方 (def days [ (t/date-time 2017 7 7) (t/date-time 2017 7 8) (t/date-time 2017 7 9) (t/date-time 2017 7 11) (t/date-time 2017 7 13)]) こんな感じのvectorがあるとき…… ※clj-time Λ࢖༻

Slide 12

Slide 12 text

I❤zip zipのちょっと変わった使い方 (def days [ (t/date-time 2017 7 7) (t/date-time 2017 7 8) (t/date-time 2017 7 9) (t/date-time 2017 7 11) (t/date-time 2017 7 13)]) こんな感じのvectorがあるとき……空いて いる日付が欲しい

Slide 13

Slide 13 text

I❤zip zipのちょっと変わった使い方 (def days [ (t/date-time 2017 7 7) (t/date-time 2017 7 8) (t/date-time 2017 7 9) (t/date-time 2017 7 11) (t/date-time 2017 7 13)]) こんな感じのvectorがあるとき……空いて いる日付が欲しい

Slide 14

Slide 14 text

I❤zip zipのちょっと変わった使い方 (zip days (rest days))

Slide 15

Slide 15 text

I❤zip zipのちょっと変わった使い方 (zip days (rest days)) => ((2017-07-07 2017-07-08) (2017-07-08 2017-07-09) (2017-07-09 2017-07-11) (2017-07-11 2017-07-13))

Slide 16

Slide 16 text

I❤zip zipのちょっと変わった使い方 (->> (zip days (rest days)) (remove #(let [[x y] %] (= (+ (t/day x) 1) (t/day y)))) (map first) (map #(t/plus % (t/days 1))))

Slide 17

Slide 17 text

I❤zip zipのちょっと変わった使い方 (->> (zip days (rest days)) (remove #(let [[x y] %] (= (+ (t/day x) 1) (t/day y)))) (map first) (map #(t/plus % (t/days 1)))) => ((2017-07-07 2017-07-08) (2017-07-08 2017-07-09) (2017-07-09 2017-07-11) (2017-07-11 2017-07-13))

Slide 18

Slide 18 text

I❤zip zipのちょっと変わった使い方 (->> (zip days (rest days)) (remove #(let [[x y] %] (= (+ (t/day x) 1) (t/day y)))) (map first) (map #(t/plus % (t/days 1)))) => ((2017-07-09 2017-07-11) (2017-07-11 2017-07-13))

Slide 19

Slide 19 text

I❤zip zipのちょっと変わった使い方 (->> (zip days (rest days)) (remove #(let [[x y] %] (= (+ (t/day x) 1) (t/day y)))) (map first) (map #(t/plus % (t/days 1)))) => ((2017-07-09) (2017-07-11))

Slide 20

Slide 20 text

I❤zip zipのちょっと変わった使い方 (->> (zip days (rest days)) (remove #(let [[x y] %] (= (+ (t/day x) 1) (t/day y)))) (map first) (map #(t/plus % (t/days 1)))) => ((2017-07-10) (2017-07-12))

Slide 21

Slide 21 text

I❤zip zipのちょっと変わった使い方 (->> (zip days (rest days)) (remove #(let [[x y] %] (= (+ (t/day x) 1) (t/day y)))) (map first) (map #(t/plus % (t/days 1)))) => ((2017-07-10) (2017-07-12))

Slide 22

Slide 22 text

I❤zip まとめ

Slide 23

Slide 23 text

I❤zip まとめ •zip便利

Slide 24

Slide 24 text

I❤zip まとめ •zip便利 (map, reduceの方が百倍よく使うけど……)

Slide 25

Slide 25 text

I❤zip まとめ •zip便利 (map, reduceの方が百倍よく使うけど……) •他にも面白い使い方があったら 教えてください