Enviar búsqueda
Cargar
Clojureコレクションで探るimmutableでpersistentな世界
•
0 recomendaciones
•
35 vistas
Kent Ohashi
Seguir
関数型言語Clojureを通して不変で永続的なコレクションに触れてみよう!
Leer menos
Leer más
Software
Denunciar
Compartir
Denunciar
Compartir
1 de 27
Descargar ahora
Descargar para leer sin conexión
Recomendados
お手軽Ajaxアプリケーションの作り方
お手軽Ajaxアプリケーションの作り方
Shunji Konishi
From Java To Clojure
From Java To Clojure
Kent Ohashi
GraphQL入門
GraphQL入門
Kent Ohashi
【アシアル塾】PHPオブジェクト指向再入門・第二回クラスの継承と委譲
【アシアル塾】PHPオブジェクト指向再入門・第二回クラスの継承と委譲
アシアル株式会社
【アシアル塾】PHPオブジェクト指向再入門・第四回デザインパターンに学ぶクラス設計
【アシアル塾】PHPオブジェクト指向再入門・第四回デザインパターンに学ぶクラス設計
アシアル株式会社
Java開発の強力な相棒として今すぐ使えるGroovy
Java開発の強力な相棒として今すぐ使えるGroovy
Yasuharu Nakano
ClassLoader Leak Patterns
ClassLoader Leak Patterns
nekop
ATN No.2 Scala事始め
ATN No.2 Scala事始め
AdvancedTechNight
Recomendados
お手軽Ajaxアプリケーションの作り方
お手軽Ajaxアプリケーションの作り方
Shunji Konishi
From Java To Clojure
From Java To Clojure
Kent Ohashi
GraphQL入門
GraphQL入門
Kent Ohashi
【アシアル塾】PHPオブジェクト指向再入門・第二回クラスの継承と委譲
【アシアル塾】PHPオブジェクト指向再入門・第二回クラスの継承と委譲
アシアル株式会社
【アシアル塾】PHPオブジェクト指向再入門・第四回デザインパターンに学ぶクラス設計
【アシアル塾】PHPオブジェクト指向再入門・第四回デザインパターンに学ぶクラス設計
アシアル株式会社
Java開発の強力な相棒として今すぐ使えるGroovy
Java開発の強力な相棒として今すぐ使えるGroovy
Yasuharu Nakano
ClassLoader Leak Patterns
ClassLoader Leak Patterns
nekop
ATN No.2 Scala事始め
ATN No.2 Scala事始め
AdvancedTechNight
Clojure REPL: The Good Parts
Clojure REPL: The Good Parts
Kent Ohashi
プログラミング言語Clojureのニャンパスでの活用事例
プログラミング言語Clojureのニャンパスでの活用事例
sohta
こわくないScala
こわくないScala
Kota Mizushima
Scala is-unscared
Scala is-unscared
Kota Mizushima
Trait in scala
Trait in scala
Yuta Shimakawa
はじめよう JavaFX 2.x(第3回 岡山Javaユーザー会)
はじめよう JavaFX 2.x(第3回 岡山Javaユーザー会)
a know
Ruby on Rails 入門
Ruby on Rails 入門
Yasuko Ohba
rpscala35-scala2.9.0
rpscala35-scala2.9.0
Kenji Yoshida
【アシアル塾】PHPオブジェクト指向再入門・第一回クラスとオブジェクト
【アシアル塾】PHPオブジェクト指向再入門・第一回クラスとオブジェクト
アシアル株式会社
Eclipse を使った java 開発 111126 杉浦
Eclipse を使った java 開発 111126 杉浦
urasandesu
夏だからJava再入門
夏だからJava再入門
Katsumi Honda
JavaからScala、そしてClojureへ: 実務で活きる関数型プログラミング
JavaからScala、そしてClojureへ: 実務で活きる関数型プログラミング
Kent Ohashi
Javascriptで学ぶ Functional Programming
Javascriptで学ぶ Functional Programming
todorokit
JavaScript入門
JavaScript入門
Ryo Maruyama
Layout analyzerでのgroovyの利用について
Layout analyzerでのgroovyの利用について
kimukou_26 Kimukou
そしてjsの基礎へ戻る#4
そしてjsの基礎へ戻る#4
Shingo Inoue
gen-class とバイトコード(第3回 gen-class 勉強会資料)
gen-class とバイトコード(第3回 gen-class 勉強会資料)
tnoda
JavaOne2013報告会 JavaFX Update
JavaOne2013報告会 JavaFX Update
Takashi Aoe
jQueryの先に行こう!最先端のWeb開発トレンドを学ぶ
jQueryの先に行こう!最先端のWeb開発トレンドを学ぶ
Shumpei Shiraishi
ECMAScript6による関数型プログラミング
ECMAScript6による関数型プログラミング
TanUkkii
インターフェース定義言語から学ぶモダンなWeb API方式: REST, GraphQL, gRPC
インターフェース定義言語から学ぶモダンなWeb API方式: REST, GraphQL, gRPC
Kent Ohashi
Team Geek Revisited
Team Geek Revisited
Kent Ohashi
Más contenido relacionado
Similar a Clojureコレクションで探るimmutableでpersistentな世界
Clojure REPL: The Good Parts
Clojure REPL: The Good Parts
Kent Ohashi
プログラミング言語Clojureのニャンパスでの活用事例
プログラミング言語Clojureのニャンパスでの活用事例
sohta
こわくないScala
こわくないScala
Kota Mizushima
Scala is-unscared
Scala is-unscared
Kota Mizushima
Trait in scala
Trait in scala
Yuta Shimakawa
はじめよう JavaFX 2.x(第3回 岡山Javaユーザー会)
はじめよう JavaFX 2.x(第3回 岡山Javaユーザー会)
a know
Ruby on Rails 入門
Ruby on Rails 入門
Yasuko Ohba
rpscala35-scala2.9.0
rpscala35-scala2.9.0
Kenji Yoshida
【アシアル塾】PHPオブジェクト指向再入門・第一回クラスとオブジェクト
【アシアル塾】PHPオブジェクト指向再入門・第一回クラスとオブジェクト
アシアル株式会社
Eclipse を使った java 開発 111126 杉浦
Eclipse を使った java 開発 111126 杉浦
urasandesu
夏だからJava再入門
夏だからJava再入門
Katsumi Honda
JavaからScala、そしてClojureへ: 実務で活きる関数型プログラミング
JavaからScala、そしてClojureへ: 実務で活きる関数型プログラミング
Kent Ohashi
Javascriptで学ぶ Functional Programming
Javascriptで学ぶ Functional Programming
todorokit
JavaScript入門
JavaScript入門
Ryo Maruyama
Layout analyzerでのgroovyの利用について
Layout analyzerでのgroovyの利用について
kimukou_26 Kimukou
そしてjsの基礎へ戻る#4
そしてjsの基礎へ戻る#4
Shingo Inoue
gen-class とバイトコード(第3回 gen-class 勉強会資料)
gen-class とバイトコード(第3回 gen-class 勉強会資料)
tnoda
JavaOne2013報告会 JavaFX Update
JavaOne2013報告会 JavaFX Update
Takashi Aoe
jQueryの先に行こう!最先端のWeb開発トレンドを学ぶ
jQueryの先に行こう!最先端のWeb開発トレンドを学ぶ
Shumpei Shiraishi
ECMAScript6による関数型プログラミング
ECMAScript6による関数型プログラミング
TanUkkii
Similar a Clojureコレクションで探るimmutableでpersistentな世界
(20)
Clojure REPL: The Good Parts
Clojure REPL: The Good Parts
プログラミング言語Clojureのニャンパスでの活用事例
プログラミング言語Clojureのニャンパスでの活用事例
こわくないScala
こわくないScala
Scala is-unscared
Scala is-unscared
Trait in scala
Trait in scala
はじめよう JavaFX 2.x(第3回 岡山Javaユーザー会)
はじめよう JavaFX 2.x(第3回 岡山Javaユーザー会)
Ruby on Rails 入門
Ruby on Rails 入門
rpscala35-scala2.9.0
rpscala35-scala2.9.0
【アシアル塾】PHPオブジェクト指向再入門・第一回クラスとオブジェクト
【アシアル塾】PHPオブジェクト指向再入門・第一回クラスとオブジェクト
Eclipse を使った java 開発 111126 杉浦
Eclipse を使った java 開発 111126 杉浦
夏だからJava再入門
夏だからJava再入門
JavaからScala、そしてClojureへ: 実務で活きる関数型プログラミング
JavaからScala、そしてClojureへ: 実務で活きる関数型プログラミング
Javascriptで学ぶ Functional Programming
Javascriptで学ぶ Functional Programming
JavaScript入門
JavaScript入門
Layout analyzerでのgroovyの利用について
Layout analyzerでのgroovyの利用について
そしてjsの基礎へ戻る#4
そしてjsの基礎へ戻る#4
gen-class とバイトコード(第3回 gen-class 勉強会資料)
gen-class とバイトコード(第3回 gen-class 勉強会資料)
JavaOne2013報告会 JavaFX Update
JavaOne2013報告会 JavaFX Update
jQueryの先に行こう!最先端のWeb開発トレンドを学ぶ
jQueryの先に行こう!最先端のWeb開発トレンドを学ぶ
ECMAScript6による関数型プログラミング
ECMAScript6による関数型プログラミング
Más de Kent Ohashi
インターフェース定義言語から学ぶモダンなWeb API方式: REST, GraphQL, gRPC
インターフェース定義言語から学ぶモダンなWeb API方式: REST, GraphQL, gRPC
Kent Ohashi
Team Geek Revisited
Team Geek Revisited
Kent Ohashi
Scala vs Clojure?: The Rise and Fall of Functional Languages in Opt Technologies
Scala vs Clojure?: The Rise and Fall of Functional Languages in Opt Technologies
Kent Ohashi
英語学習者のためのフランス語文法入門: フランス語完全理解(?)
英語学習者のためのフランス語文法入門: フランス語完全理解(?)
Kent Ohashi
実用のための語源学入門
実用のための語源学入門
Kent Ohashi
メタプログラミング入門
メタプログラミング入門
Kent Ohashi
労働法の世界
労働法の世界
Kent Ohashi
Clojureで作る"simple"なDSL
Clojureで作る"simple"なDSL
Kent Ohashi
RDBでのツリー表現入門
RDBでのツリー表現入門
Kent Ohashi
Everyday Life with clojure.spec
Everyday Life with clojure.spec
Kent Ohashi
たのしい多言語学習
たのしい多言語学習
Kent Ohashi
Ductモジュール入門
Ductモジュール入門
Kent Ohashi
"Simple Made Easy" Made Easy
"Simple Made Easy" Made Easy
Kent Ohashi
Clojurian Conquest
Clojurian Conquest
Kent Ohashi
ClojurianからみたElixir
ClojurianからみたElixir
Kent Ohashi
GraphQL API in Clojure
GraphQL API in Clojure
Kent Ohashi
法学入門
法学入門
Kent Ohashi
Interceptors: Into the Core of Pedestal
Interceptors: Into the Core of Pedestal
Kent Ohashi
Boost your productivity with Clojure REPL
Boost your productivity with Clojure REPL
Kent Ohashi
ClojureScript: The Good Parts
ClojureScript: The Good Parts
Kent Ohashi
Más de Kent Ohashi
(20)
インターフェース定義言語から学ぶモダンなWeb API方式: REST, GraphQL, gRPC
インターフェース定義言語から学ぶモダンなWeb API方式: REST, GraphQL, gRPC
Team Geek Revisited
Team Geek Revisited
Scala vs Clojure?: The Rise and Fall of Functional Languages in Opt Technologies
Scala vs Clojure?: The Rise and Fall of Functional Languages in Opt Technologies
英語学習者のためのフランス語文法入門: フランス語完全理解(?)
英語学習者のためのフランス語文法入門: フランス語完全理解(?)
実用のための語源学入門
実用のための語源学入門
メタプログラミング入門
メタプログラミング入門
労働法の世界
労働法の世界
Clojureで作る"simple"なDSL
Clojureで作る"simple"なDSL
RDBでのツリー表現入門
RDBでのツリー表現入門
Everyday Life with clojure.spec
Everyday Life with clojure.spec
たのしい多言語学習
たのしい多言語学習
Ductモジュール入門
Ductモジュール入門
"Simple Made Easy" Made Easy
"Simple Made Easy" Made Easy
Clojurian Conquest
Clojurian Conquest
ClojurianからみたElixir
ClojurianからみたElixir
GraphQL API in Clojure
GraphQL API in Clojure
法学入門
法学入門
Interceptors: Into the Core of Pedestal
Interceptors: Into the Core of Pedestal
Boost your productivity with Clojure REPL
Boost your productivity with Clojure REPL
ClojureScript: The Good Parts
ClojureScript: The Good Parts
Clojureコレクションで探るimmutableでpersistentな世界
1.
Clojureコレクションで探る immutableでpersistentな世界
2.
lagénorhynque 🐬カマイルカ (defprofile lagénorhynque :id
@lagenorhynque :readings ["/laʒenɔʁɛ̃ k/" "ラジェノランク"] :aliases ["カマイルカ" "🐬"] :languages [Java Japanese ; native languages Clojure Haskell ; functional languages English français] ; European languages :interests [programming language-learning law politics mathematics])
3.
1. 改めて関数型プログラミング(言語)とは? 2. JavaとClojureのコレクションを調べてみよう 3.
Clojureコレクションの全体像 4. 局所的にミュータビリティがほしいとき 5. 独自コレクションを実装しよう
4.
改めて関数型プログラミング(言語)とは?
5.
定義例 関数型プログラミング(functional programming; FP) 副作用を可能な限り避ける(局所化する)プログラ ミングスタイル 関数型プログラミング言語(functional programming language;
FPL) 関数型プログラミングが実践しやすいように設計 されている言語
6.
再代入不可な変数が定義可能であればFPL? const, final, val,
etc. それを活用していればFPしていることになる? ラムダ式があり高階関数が豊富に提供されていれば FPL? filter, map, reduce, etc. それを活用していればFPしていることになる?
7.
確かにFP/FPLに近づいている感じがする。 でも、それで満足?
8.
私🐬が期待する実用的なFPLのイメージ: 不変で永続的なデータ構造(immutable persistent data structures)
が豊富に提供さ れ、容易に定義可能 そうでないデータ構造は非中心的な位置付け i.e. immutableでpersistentがデフォルト FP もできる言語をFPLと呼びたくはない
9.
永続的(persistent) 関数型データ構造を更新する際には、更新前と更新 後のバージョンが両方ともその後の処理で利用でき ることを期待する 複数のバージョンをサポートするデータ構造は永続 的(persistent) ←→ 同時に1つのバージョンしか許さないデータ 構造は刹那的(ephemeral) FPLはすべてのデータ構造が自然と永続的になると いう興味深い性質を持つ 命令型データ構造は概して刹那的 (p. 13) 『純粋関数型データ構造』
10.
JavaとClojureのコレクションを調べてみよう
11.
Java オブジェクト指向・非関数型言語 静的型付き言語 JVM言語 関数型プログラミング関連機能が充実してきた // メソッドの定義 jshell> void
hello(Object x) { ...> System.out.println("Hello, %s!".formatted(x)); ...> } | created method hello(Object) // メソッドの呼び出し jshell> hello("Java") Hello, Java!
12.
Clojure 非オブジェクト指向・関数型言語 動的型付き言語 JVM言語 オブジェクト指向を嫌い関数型を志向したLisp ;; 関数の定義 user=> (defn
hello [x] (println (str "Hello, " x "!"))) #'user/hello ;; 関数の呼び出し(適用) user=> (hello "Clojure") Hello, Clojure! nil
13.
参考: Scala オブジェクト指向・関数型言語 静的型付き言語 JVM言語 オブジェクト指向に関数型が溶け込んだ言語 // メソッドの定義 scala>
def hello(x: Any): Unit = | println(s"Hello, $x!") def hello(x: Any): Unit // メソッドの呼び出し scala> hello("Scala") Hello, Scala!
14.
[Java] の実装のひとつ immutableでephemeralな可変長配列 java.util.ArrayList user=> (def xs
(java.util.ArrayList.)) #'user/xs user=> xs [] user=> (def ys ; ysに束縛 #_=> (doto xs #_=> (.add 1) ; 破壊的に要素追加 #_=> (.add 2) #_=> (.add 3))) #'user/ys user=> ys [1 2 3] user=> (identical? xs ys) ; オブジェクトの同一性を確認 true java.util.List
15.
[Java] unmodifiable (view)
list user=> (def xs #_=> (doto (java.util.ArrayList.) #_=> (.add 1) #_=> (.add 2) #_=> (.add 3))) #'user/xs user=> xs [1 2 3] user=> (def ys (java.util.Collections/unmodifiableList xs)) ; 変 #'user/ys user=> (.add ys 4) ; 破壊的更新操作はできない Execution error (UnsupportedOperationException) at java.util.Col modifiableCollection/add (Collections.java:1067). null
16.
コレクション(ここではList)に対する変更不可能な ビュー もとのコレクションやその要素がmutableなら immutableではない もとのコレクションが(実質的に) immutableであ る、もしくはこのビューを介してのみ操作できる 状態であれば実質的にimmutable cf. user=> (.add
xs 4) ; もとのリストは破壊的更新操作ができる true user=> xs [1 2 3 4] user=> ys ; 変更不可能なビューにも波及する [1 2 3 4] java.util.Collection
17.
[Clojure] の実装 immutableでpersistentな可変長配列 の一種 ベクター(vector) user=> (def xs
[]) ; 初期化 #'user/xs user=> xs [] user=> (def ys (conj xs 1 2 3)) ; 要素追加してysに束縛(破壊的更新操作 #'user/ys user=> ys [1 2 3] user=> (identical? xs ys) ; オブジェクトの同一性を確認 false clojure.lang.IPersistentVector HAMT (hash array mapped trie)
18.
Clojureコレクションの全体像
19.
Clojureコレクションに関するインターフェース ref. (p. 38) Clojure
Applied
20.
参考: Scala不変コレクションのトレイト Traversable Iterable Seq Set
Map IndexedSeq LinearSeq SortedSet SortedMap BitSet ref. 可変コレクションおよび不変コレクション| Collections | Scala Documentation
21.
Clojureコレクションの性能特性 ref. Clojure Performance
Guarantees
22.
Scala不変コレクション(列型)の性能特性 ref. 性能特性| Collections
| Scala Documentation
23.
Clojureのデータ構造の応用について気になったら 書籍 を読もう Clojure Applied
24.
Further Reading
25.
Clojure Clojure Clojure - Data
Structures Clojure - Sequences Clojure - Transient Data Structures Clojure - Datatypes: deftype, defrecord and reify Clojure Applied: From Practice to Practitioner Clojure Performance Guarantees [Stefan Tilkov’s Blog] clojure/core.rrb-vector: RRB-Trees in Clojure
26.
Scala Java Scala 可変コレクションおよび不変コレクション| Collections | Scala
Documentation 性能特性| Collections | Scala Documentation Java SE 17 & JDK 17 The Collections Framework (Java SE 17 & JDK 17)
27.
Kotlin JavaScript Python Kotlin/kotlinx.collections.immutable: Immutable persistent collections
for Kotlin immutable-js/immutable-js: Immutable persistent data collections for Javascript which increase efficiency and simplicity. tobgu/pyrsistent: Persistent/Immutable/Functional data structures for Python
Descargar ahora