Upload
Download free for 30 days
Login
Submit search
Clojureコレクションで探るimmutableでpersistentな世界
0 likes
51 views
Kent Ohashi
関数型言語Clojureを通して不変で永続的なコレクションに触れてみよう!
Software
Read more
1 of 27
Download now
Download to read offline
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
More Related Content
PDF
お手軽Ajaxアプリケーションの作り方
Shunji Konishi
PDF
ミュータビリティとイミュータビリティの狭間: 関数型言語使いから見たKotlinコレクション
Kent Ohashi
PDF
From Java To Clojure
Kent Ohashi
PDF
GraphQL入門
Kent Ohashi
PDF
【アシアル塾】PHPオブジェクト指向再入門・第二回クラスの継承と委譲
アシアル株式会社
PDF
【アシアル塾】PHPオブジェクト指向再入門・第四回デザインパターンに学ぶクラス設計
アシアル株式会社
PDF
do Notation Equivalents in JVM languages: Scala, Kotlin, Clojure
Kent Ohashi
PDF
From Scala/Clojure to Kotlin
Kent Ohashi
お手軽Ajaxアプリケーションの作り方
Shunji Konishi
ミュータビリティとイミュータビリティの狭間: 関数型言語使いから見たKotlinコレクション
Kent Ohashi
From Java To Clojure
Kent Ohashi
GraphQL入門
Kent Ohashi
【アシアル塾】PHPオブジェクト指向再入門・第二回クラスの継承と委譲
アシアル株式会社
【アシアル塾】PHPオブジェクト指向再入門・第四回デザインパターンに学ぶクラス設計
アシアル株式会社
do Notation Equivalents in JVM languages: Scala, Kotlin, Clojure
Kent Ohashi
From Scala/Clojure to Kotlin
Kent Ohashi
Similar to Clojureコレクションで探るimmutableでpersistentな世界
(20)
PDF
Java開発の強力な相棒として今すぐ使えるGroovy
Yasuharu Nakano
PDF
ClassLoader Leak Patterns
nekop
PDF
ATN No.2 Scala事始め
AdvancedTechNight
PDF
Clojure REPL: The Good Parts
Kent Ohashi
PDF
プログラミング言語Clojureのニャンパスでの活用事例
sohta
PDF
こわくないScala
Kota Mizushima
PDF
Scala is-unscared
Kota Mizushima
PDF
Trait in scala
Yuta Shimakawa
PDF
はじめよう JavaFX 2.x(第3回 岡山Javaユーザー会)
a know
PDF
Ruby on Rails 入門
Yasuko Ohba
PDF
rpscala35-scala2.9.0
Kenji Yoshida
PDF
【アシアル塾】PHPオブジェクト指向再入門・第一回クラスとオブジェクト
アシアル株式会社
PPT
Eclipse を使った java 開発 111126 杉浦
urasandesu
PDF
夏だからJava再入門
Katsumi Honda
PDF
JavaからScala、そしてClojureへ: 実務で活きる関数型プログラミング
Kent Ohashi
ODP
Javascriptで学ぶ Functional Programming
todorokit
PDF
JavaScript入門
Ryo Maruyama
PDF
Layout analyzerでのgroovyの利用について
kimukou_26 Kimukou
PDF
そしてjsの基礎へ戻る#4
Shingo Inoue
PDF
gen-class とバイトコード(第3回 gen-class 勉強会資料)
tnoda
Java開発の強力な相棒として今すぐ使えるGroovy
Yasuharu Nakano
ClassLoader Leak Patterns
nekop
ATN No.2 Scala事始め
AdvancedTechNight
Clojure REPL: The Good Parts
Kent Ohashi
プログラミング言語Clojureのニャンパスでの活用事例
sohta
こわくないScala
Kota Mizushima
Scala is-unscared
Kota Mizushima
Trait in scala
Yuta Shimakawa
はじめよう JavaFX 2.x(第3回 岡山Javaユーザー会)
a know
Ruby on Rails 入門
Yasuko Ohba
rpscala35-scala2.9.0
Kenji Yoshida
【アシアル塾】PHPオブジェクト指向再入門・第一回クラスとオブジェクト
アシアル株式会社
Eclipse を使った java 開発 111126 杉浦
urasandesu
夏だからJava再入門
Katsumi Honda
JavaからScala、そしてClojureへ: 実務で活きる関数型プログラミング
Kent Ohashi
Javascriptで学ぶ Functional Programming
todorokit
JavaScript入門
Ryo Maruyama
Layout analyzerでのgroovyの利用について
kimukou_26 Kimukou
そしてjsの基礎へ戻る#4
Shingo Inoue
gen-class とバイトコード(第3回 gen-class 勉強会資料)
tnoda
Ad
More from Kent Ohashi
(20)
PDF
関数型言語テイスティング: Haskell, Scala, Clojure, Elixirを比べて味わう関数型プログラミングの旨さ
Kent Ohashi
PDF
純LISPから考える関数型言語のプリミティブ: Clojure, Elixir, Haskell, Scala
Kent Ohashi
PDF
TDD with RDD: Clojure/LispのREPLで変わる開発体験
Kent Ohashi
PDF
🐬の推し本紹介2024: 『脱・日本語なまり 英語(+α)実践音声学』
Kent Ohashi
PDF
map関数の内部実装から探るJVM言語のコレクション: Scala, Kotlin, Clojureコレクションの基本的な設計を理解しよう
Kent Ohashi
PDF
Kotlin Meets Data-Oriented Programming: Kotlinで実践する「データ指向プログラミング」
Kent Ohashi
PDF
RDBでのツリー表現入門2024
Kent Ohashi
PDF
インターフェース定義言語から学ぶモダンなWeb API方式: REST, GraphQL, gRPC
Kent Ohashi
PDF
Team Geek Revisited
Kent Ohashi
PDF
Scala vs Clojure?: The Rise and Fall of Functional Languages in Opt Technologies
Kent Ohashi
PDF
英語学習者のためのフランス語文法入門: フランス語完全理解(?)
Kent Ohashi
PDF
実用のための語源学入門
Kent Ohashi
PDF
メタプログラミング入門
Kent Ohashi
PDF
労働法の世界
Kent Ohashi
PDF
Clojureで作る"simple"なDSL
Kent Ohashi
PDF
RDBでのツリー表現入門
Kent Ohashi
PDF
Everyday Life with clojure.spec
Kent Ohashi
PDF
たのしい多言語学習
Kent Ohashi
PDF
Ductモジュール入門
Kent Ohashi
PDF
"Simple Made Easy" Made Easy
Kent Ohashi
関数型言語テイスティング: Haskell, Scala, Clojure, Elixirを比べて味わう関数型プログラミングの旨さ
Kent Ohashi
純LISPから考える関数型言語のプリミティブ: Clojure, Elixir, Haskell, Scala
Kent Ohashi
TDD with RDD: Clojure/LispのREPLで変わる開発体験
Kent Ohashi
🐬の推し本紹介2024: 『脱・日本語なまり 英語(+α)実践音声学』
Kent Ohashi
map関数の内部実装から探るJVM言語のコレクション: Scala, Kotlin, Clojureコレクションの基本的な設計を理解しよう
Kent Ohashi
Kotlin Meets Data-Oriented Programming: Kotlinで実践する「データ指向プログラミング」
Kent Ohashi
RDBでのツリー表現入門2024
Kent Ohashi
インターフェース定義言語から学ぶモダンなWeb API方式: REST, GraphQL, gRPC
Kent Ohashi
Team Geek Revisited
Kent Ohashi
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
Kent Ohashi
RDBでのツリー表現入門
Kent Ohashi
Everyday Life with clojure.spec
Kent Ohashi
たのしい多言語学習
Kent Ohashi
Ductモジュール入門
Kent Ohashi
"Simple Made Easy" Made Easy
Kent Ohashi
Ad
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
Download