Suche senden
Hochladen
Clojure座談会 #1 LT 独自コレクションを定義しよう
•
Als PPTX, PDF herunterladen
•
0 gefällt mir
•
527 views
Keisuke Fukuda
Folgen
Clojure座談会#1(2015/09/12)で話したLTです
Weniger lesen
Mehr lesen
Technologie
Melden
Teilen
Melden
Teilen
1 von 13
Jetzt herunterladen
Empfohlen
データベース・リファクタリング読書会第四回オープニング
データベース・リファクタリング読書会第四回オープニング
akitsukada
MP in Scala
MP in Scala
Kent Ohashi
Functional Way
Functional Way
Kent Ohashi
MP in Haskell
MP in Haskell
Kent Ohashi
From Java To Clojure (English version)
From Java To Clojure (English version)
Kent Ohashi
おいしいLisp
おいしいLisp
Kent Ohashi
From Java To Clojure
From Java To Clojure
Kent Ohashi
秒速ChainerMN
秒速ChainerMN
Keisuke Fukuda
Empfohlen
データベース・リファクタリング読書会第四回オープニング
データベース・リファクタリング読書会第四回オープニング
akitsukada
MP in Scala
MP in Scala
Kent Ohashi
Functional Way
Functional Way
Kent Ohashi
MP in Haskell
MP in Haskell
Kent Ohashi
From Java To Clojure (English version)
From Java To Clojure (English version)
Kent Ohashi
おいしいLisp
おいしいLisp
Kent Ohashi
From Java To Clojure
From Java To Clojure
Kent Ohashi
秒速ChainerMN
秒速ChainerMN
Keisuke Fukuda
Supercomputing'18 概要紹介
Supercomputing'18 概要紹介
Keisuke Fukuda
深層学習インフラ、借りるべきか?買うべきか?
深層学習インフラ、借りるべきか?買うべきか?
Keisuke Fukuda
Effective Modern C++ 読書会 Item 35
Effective Modern C++ 読書会 Item 35
Keisuke Fukuda
Effective Modern C++ 勉強会 Item 22
Effective Modern C++ 勉強会 Item 22
Keisuke Fukuda
Effective modern C++ 勉強会 #3 Item 12
Effective modern C++ 勉強会 #3 Item 12
Keisuke Fukuda
Effective Modern C++勉強会#2 Item 11(,12)
Effective Modern C++勉強会#2 Item 11(,12)
Keisuke Fukuda
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
CRI Japan, Inc.
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
iPride Co., Ltd.
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
CRI Japan, Inc.
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NTT DATA Technology & Innovation
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
iPride Co., Ltd.
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
Hiroshi Tomioka
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
iPride Co., Ltd.
Weitere ähnliche Inhalte
Mehr von Keisuke Fukuda
Supercomputing'18 概要紹介
Supercomputing'18 概要紹介
Keisuke Fukuda
深層学習インフラ、借りるべきか?買うべきか?
深層学習インフラ、借りるべきか?買うべきか?
Keisuke Fukuda
Effective Modern C++ 読書会 Item 35
Effective Modern C++ 読書会 Item 35
Keisuke Fukuda
Effective Modern C++ 勉強会 Item 22
Effective Modern C++ 勉強会 Item 22
Keisuke Fukuda
Effective modern C++ 勉強会 #3 Item 12
Effective modern C++ 勉強会 #3 Item 12
Keisuke Fukuda
Effective Modern C++勉強会#2 Item 11(,12)
Effective Modern C++勉強会#2 Item 11(,12)
Keisuke Fukuda
Mehr von Keisuke Fukuda
(6)
Supercomputing'18 概要紹介
Supercomputing'18 概要紹介
深層学習インフラ、借りるべきか?買うべきか?
深層学習インフラ、借りるべきか?買うべきか?
Effective Modern C++ 読書会 Item 35
Effective Modern C++ 読書会 Item 35
Effective Modern C++ 勉強会 Item 22
Effective Modern C++ 勉強会 Item 22
Effective modern C++ 勉強会 #3 Item 12
Effective modern C++ 勉強会 #3 Item 12
Effective Modern C++勉強会#2 Item 11(,12)
Effective Modern C++勉強会#2 Item 11(,12)
Kürzlich hochgeladen
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
CRI Japan, Inc.
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
iPride Co., Ltd.
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
CRI Japan, Inc.
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NTT DATA Technology & Innovation
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
iPride Co., Ltd.
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
Hiroshi Tomioka
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
iPride Co., Ltd.
Kürzlich hochgeladen
(7)
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
Clojure座談会 #1 LT 独自コレクションを定義しよう
1.
独自コレクションを定義しよう Clojure座談会 #1 on
2015/09/12 @keisukefukuda
2.
なぜClojureか • Clojureは完全に趣味 • なぜClojureか •
趣味なので、「本質的に学ぶところがある」言語をやりたい • Goとか流行ってるけど本質的に新しくはないし • Scala試して死んだ → そもそも俺はC++で荒れた心を休めたいんだ よ • Clojure、Haskell、Erlang(Elixir)くらい? • といいつつある程度の実用性(JVM, Heroku) • Minecraftとかの拡張書けるんじゃね?(まだ試してない)
3.
Clojureの思想(の1つ) "It is better
to have 100 functions operate on one data structure than to have 10 functions operate on 10 data structures." - Alan J. Perlis from http://clojure.org/rationale 10のデータ構造のそれぞれに10個ずつ関数を作るよりも、1個 のデータ構造に100個の関数がある方が良い
4.
(だいたい)なんでもmap, vector, set •
クラスを作ってメソッド実装というのは(あまり)やらない • だいたいmapでおk • clojureの大量の関数がそのまま使える
5.
だけど • 独自のデータ型が欲しい場合もある • 例: •
基本的にはmapで良いが、一部の要素を遅延評価したい • PDFパーザーを書いているときの実体験 {:a 1 :b (delay (do-something-1)) :c (future (do-something-2)) :d 2} (let [a (:a m)] (let [a (if (instance? clojure.lang.IDeref a) @a a)] ……))
6.
だけど • 独自のデータ型が欲しい場合もある • 例: •
基本的にはmapで良いが、一部の要素を遅延評価したい • PDFパーザーを書いているときの実体験 {:a 1 :b (delay (do-something-1)) :c (future (do-something-2)) :d 2} (let [a (get-a m)] ……) メソッド定義する?
7.
そこで • Clojureのmapなどは、実装レベルではJavaのクラス • ClojureではJavaのクラスを定義できる •
組み込みデータ型と同じように振る舞う独自型を定義すれば いいんじゃね?
8.
http://www.rkn.io/2014/02/20/clojure-cookbook-rbt/
9.
やってみる • clojure.lang.APersistentMapがimplementしているインター フェース • clojure.lang.Associative •
clojure.lang.IPersistentMap • clojure.lang.IPersistentCollection • clojure.lang.IFn • clojure.lang.ILookup • java.util.Map • java.lang.Iterable • clojure.lang.Seqable • clojure.lang.Reversible
10.
やってみる (deftype MyMap1 [ks
f] clojure.lang.Associative clojure.lang.IPersistentMap (entryAt [this k] (if (some #{k} ks) (reify clojure.lang.IMapEntry (key [this] k) (val [this] (f k))) nil)) (assoc [this key val] this) (assocEx [this key val] (throw (Exception. "error"))) (without [this key] this) clojure.lang.IFn (invoke [this k] (let [v (.valAt this k)] v)) clojure.lang.ILookup (valAt [this k] (if (some #{k} ks) (f k) nil)) (valAt [this k not-found] (if (some #{k} ks) (.valAt this k) not-found)) clojure.lang.IPersistentCollection (count [_] (.count ks)) (empty [_] (.empty ks)) (equiv [this o] (and (instance? o MyMap1) (= (keys o) ks) (= (vals o) (map f keys)))) (cons [_ v] _) java.lang.Iterable (iterator [this] (let [s (seq this)] (reify java.util.Iterator (hasNext [this] (.hasNext s)) (next [this] (.next s)) (remove [this] (.remove s))))) clojure.lang.Seqable (seq [_] (map #(reify java.util.Map$Entry (getKey [_] %) (getValue [_] (f %))) ks)) clojure.lang.Reversible (rseq [_] (reverse (seq _))))
11.
ライブラリ化しよう • 作業中
12.
ブログにも少し書きました http://freak-da.hatenablog.com/
13.
Question?
Jetzt herunterladen