Contenu connexe Similaire à kollectionの紹介 (17) Plus de Kota Mizushima (20) kollectionの紹介8. KList
コンスセルベースの不変リスト
val a = 1 cons (2 cons (3 cons (4 cons (5 cons Nil))))
val b = KList(1, 2, 3, 4, 5)
a == b
val a = KList(KList(1, 2), KList(3, 4), KList(5, 6))
val result = a.sum(KMonoid.KLIST())
result == KList(1, 2, 3, 4, 5, 6)
val a = Klist(1, 2, 3, 4, 5) zip KList(1, 2, 3, 4, 5)
a == KList(1 to 1, 2 to 2, 3 to 3, 4 to 4, 5 to 5)
9. KStream
コンスセルベースの遅延リスト
fun ones(): KStream<Int> = 1 cons { ones() }
println(ones().take(5)) // KStream(1, 1, 1, 1, 1)
fun fib(): KStream<Int> = 0 cons { 1 cons { fib() zip fib().tl map {it.first
println(fib().take(7)) // KStream(0, 1, 1, 2, 3, 5, 8)
val nat = KStream.from(0)
println(nat.take(5)) // KStream(0, 1, 2, 3, 4)
11. KEither
失敗した場合の情報を保持するように を拡張
したもの
通常、 で成功時の情報を、 で失敗時の情
報を保持する
いわゆるEither
val x: KEither<Int, Int> = Left<Int, Int>(1)
x.map{it * 2} == Left<Int, Int>(1) // Left 場合 map 適用
val x: KEither<Int, Int> = Right<Int, Int>(1)
x.map{it * 2} == Right<Int, Int>(2) // Right 場合 map 適用
12. KBatchedQueue
不変キュー(FIFO)
償却計算量(O(n))
val q = KBatchedQueue(1, 2, 3, 4, 5)
val result = q enqueue 6
KBatchedQueue(1, 2, 3, 4, 5, 6).toList() == result.toList()
val q = KBatchedQueue(1, 2, 3, 4, 5)
val result = q enqueue 6
val result = q.dequeue()
KBatchedQueue(2, 3, 4, 5).toList() == result.toList()
13. KStack
不変スタック(内部的には を利用)
val kstack = KStack(1, 2, 3, 4, 5)
kstack == KStack<Int>().push(1).push(2).push(3).push(4).push(5)
kstack.top == 5
kstack.pop() == KStack(1, 2, 3, 4)
14. KListSet
不変集合
ベースなので遅いが、 さえ定義されて
いれば何にでも使える
val set = KListSet(1, 2, 3, 4, 5)
set[0] == false
set[1] == true
set[6] == false
val set2 = set + 6
set[0] == false
set[1] == true
set[6] == true
val set3 = set2 - 1
set[0] == false
set[1] == false
set[6] == true