2019-09-01から1ヶ月間の記事一覧

Scala Stream(Scala関数型デザインより)

Scala Lazy!(Scala関数型デザインより) - shutdown -r nowからの続きで、Streamを扱う。 package example.laziness.stream import Stream._ trait Stream[+A] { def toList: List[A] = { @annotation.tailrec def go(s: Stream[A], acc: List[A]): List[A]…

Scala Lazy!(Scala関数型デザインより)

「Scala関数型デザイン&プログラミング」の「第 5 章 正格 と 遅延」 ストリームによる、Lazy処理を行う。 コード package example.laziness import Stream._ trait Stream[+A] { def toListRecursive: List[A] = this match { case Cons(h,t) => h() :: t()…

ScalaのEither(Scala関数型デザインより)

「Scala関数型デザイン&プログラミング」の「第 4 章 例外 を 使わ ない エラー 処理」のEither編。 package example sealed trait Either[+E,+A] { def map[B](f: A => B): Either[E, B] = this match { case Right(a) => Right(f(a)) case Left(e) => Left…

ScalaのOption(Scala関数型デザインより)

「Scala関数型デザイン&プログラミング」の「第 4 章 例外 を 使わ ない エラー 処理」をやる。 package example sealed trait Option[+A] { def map[B](f: A => B): Option[B] = this match { case None => None case Some(x) => Some(f(x)) } def flatMap[…

Scalaツリー遊び(Scala関数型デザインより)

リスト秋田県。 ツリーで遊ぶ。 2分木ツリーだよ。 package example sealed trait Tree[+A] case class Leaf[A](value: A) extends Tree[A] case class Branch[A](left: Tree[A], right: Tree[A]) extends Tree[A] object Tree { def size[A](t: Tree[A]): I…

Scalaリスト遊び3(Scala関数型デザインより)

まだまだリストで遊ぶぞ。 def concat[A](l: List[List[A]]): List[A] = foldRight(l)(Nil:List[A])(append) リストのリストを平らにする。やはりfoldRightで、右から、リストをappendしていく def map[A, B](as: List[A])(f: A => B): List[B] = foldRight(…

Scalaリスト遊び2(Scala関数型デザインより)

Scalaのリスト遊びの続き。 def reverse[A](l: List[A]): List[A] = foldLeft(l)(List[A]())((acc:List[A],h:A) => Cons(h,acc)) 引数で指定されたリストを逆にする。 def reverse[A](l: List[A]): List[A] = foldLeft(l)(List[A]())((acc:List[A],h:A) => C…

Scalaリスト遊び1(Scala関数型デザインより)

「Scala関数型デザイン&プログラミング」のリスト 第 3 章 関数 型 プログラミング の データ 構造 辺りのリスト コード package example sealed trait List[+A] case object Nil extends List[Nothing] case class Cons[+A](head: A, tail: List[A]) extend…

Scalaカレー(Scala関数型デザインより)

久しぶりのブログ更新です。 最近、Scalaを復習中。 Scalaの関数型部分をよく理解せずに使っていたので、すごいHaskell本を読んで さらに「Scala関数型デザイン&プログラミング」を読んでいる。 「2. 6 型 に従う 実装」のカリー化 まず最初に、以下のコマン…